Express 中间件未设置 CORS 标头

Posted

技术标签:

【中文标题】Express 中间件未设置 CORS 标头【英文标题】:Express Middleware not setting CORS header 【发布时间】:2018-05-08 21:00:19 【问题描述】:

我正在尝试在 express 应用上设置 CORS 标头,但我不知道为什么它不起作用:

app.use(function(req, res, next)
    res.append('Access-Control-Allow-Origin','*');
    res.set("Access-Control-Allow-Methods","GET, POST, OPTIONS");
    res.set("Access-Control-Allow-Headers","Content-Type, Authorization, Content-Length, X-Requested-With");
    if ("OPTIONS" == req.method)
        res.send(200);
    
    console.log("Set CORS Header");
    next();
);

我也尝试过使用 res.header、res.setheader 和 res.append,但都没有正确设置标头,但是每次通过请求时控制台上都会出现“设置 CORS 标头”消息。

编辑:看起来它可能与 AWS EC2 有关?

完整的服务器代码在这里:https://github.com/rossgriebenow/wkdu-music-webapp/blob/master/WKDU_SQL.js

【问题讨论】:

res.appendres.set 有什么区别? 【参考方案1】:

你有没有尝试过 express cors,它更简单,并破坏了手动设置你的 cors 的需要,首先使用这个安装它:

yarn add cors
//if u use yarn
npm install cors --save
//if u use npm

之后像这样在中间件中使用它:

//for example
var express = require('express')
var cors = require('cors')
var app = express()

app.use(cors())

app.get('/products/:id', function (req, res, next) 
  res.json(msg: 'This is CORS-enabled for all origins!')
)

app.listen(80, function () 
  console.log('CORS-enabled web server listening on port 80')
)

您还可以在此 github 页面 https://github.com/expressjs/cors 中查看此模块的另一种方法

【讨论】:

哦,我看到你在使用aws,我认为你应该先在aws中打开端口,你打开那个端口了吗? 是的,页面已加载,但由于 CORS 问题,所有非静态端点都无法正常工作。

以上是关于Express 中间件未设置 CORS 标头的主要内容,如果未能解决你的问题,请参考以下文章

Auth 标头未与 GET 请求一起发送

自定义 http 标头破坏了 CORS

Express + Passport.js:req.user 未定义

Express + Passport + CORS:允许多个域的会话

Express 默认会禁用 CORS 吗?

在使用 node.js 和 Express 构建的 api 中使用 cors 中间件时出现 CORS 错误