作项目用Express框架搭服务端解决跨域问题的时候遇到的一个坑,app.all()居然不生效,记录下来防止之后再犯😅跨域
在app.js中加入如下代码解决跨域问题相信你们都知道:app
app.all('*', function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*')
res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
res.setHeader('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key')
if (req.method == 'OPTIONS') {
res.status(200).end()
} else {
next()
}
})
复制代码
可是我却遇到了一个问题,返回的报文响应头部却没有设置的这三个字段,只有在返回数据的前面设置头部字段才生效,后来发现问题出在这段代码加入的地方。我把它放在了app.use()
路由处理的后面了,即响应报文发出去了才设置报文头,这固然没有效果。框架
由于Express是按照定义的顺序执行中间件,所以只要将app.all()
放到路由处理前面就行了 spa