Nodejs Express遇到的坑

2,175 阅读1分钟

做项目用Express框架搭服务端解决跨域问题的时候遇到的一个坑,app.all()竟然不生效,记录下来防止以后再犯😅

解决跨域(CORS)

在app.js中加入以下代码解决跨域问题相信大家都知道:

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()放到路由处理前面就好了

example

参考资料:stackoverflow.com/questions/2…