最近在研究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。