node+express(解决跨域)

最近在研究node+express搭建简单的后台,但发现了跨域如下图:


跨域

因为我的后端地址的端口号为3000,前台启动的端口号是8080;由于同源策略,就跨域了。既然跨域了,问题还是要解决。查了资料,我最初是在express搭建的项目中,找到app.js
加了这么一段代码,如下图:


跨域尝试解决图一

但是问题并没有解决,还是报跨域。很显然这样写没用,我就想到了express中使用中间件,又测试了一番。最后附上正确解决跨域的代码:
app.use((req, res, next) => {
    //设置请求头
    res.set({
        'Access-Control-Allow-Credentials': true,
        'Access-Control-Max-Age': 1728000,
        'Access-Control-Allow-Origin': req.headers.origin || '*',
        'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type',
        'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS',
        'Content-Type': 'application/json; charset=utf-8'
    })
    req.method === 'OPTIONS' ? res.status(204).end() : next()
})

其中 'Access-Control-Allow-Origin': req.headers.origin || '*',就是解决跨域最关键的一句。

同时附上:app.use('/',callback)和app.all('',callback)区别*
app.use只查看路由是否以指定的路径开头
app.all匹配完整的路径
'/',是根路径,那么所有路径进来,都会执行 callback,'/' 也是 use 的默认 path,callback 是否执行,要看 callback的路径前加上'/'和实际路径是否匹配。
*是一个正则,匹配所有路径,但是只要一个路径进来,可能都会执行 callback。

你可能感兴趣的:(node+express(解决跨域))