Express 配置为使用 CORS 不接受 CORS

Posted

技术标签:

【中文标题】Express 配置为使用 CORS 不接受 CORS【英文标题】:Express configured to use CORS does not accept CORS 【发布时间】:2021-05-03 16:48:04 【问题描述】:

我在 Express 上遇到了一些奇怪的事情。我有一个接收日志数据并将其推送到 postgres 数据库的端点,但我在请求时收到此错误:

Access to XMLHttpRequest at 'https://myserver.com/log' from origin 'https://myorigin.io' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这没有任何意义,因为我已将 express 应用程序配置为接受 CORS,并且看起来接受了选项请求?这是相关的服务器端代码

app.use(function (req, res, next) 
  res.header("Access-Control-Allow-Origin", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept"
  );
  next();
);

app.use(express.json());

这是请求

$.ajax(
    type: "POST",
    url: "https://myserver.com/log",
    data: JSON.stringify( "username": "test", "json": a: 1),
    dataType: 'json',
    contentType: 'application/json'
)

我试过了

app.use(cors())

app.use(cors());
app.options("*", cors());

无济于事。

我在这里遗漏了什么明显的东西吗?

【问题讨论】:

【参考方案1】:

您是否安装了cors npm 模块并导入到您的 server.js 或 index.js 文件中。理想情况下,您应该通过npm install -save cors 安装

然后如下使用

var express = require('express');
var cors = require('cors');  // from cors npm module
var app = express();
app.use(cors());

【讨论】:

是的,我也尝试过使用该方法,但它产生了同样的错误。

以上是关于Express 配置为使用 CORS 不接受 CORS的主要内容,如果未能解决你的问题,请参考以下文章

Express 服务器不回复正确的 cors 标头

使用 express 配置 CORS 并使用 axios 在前端发出请求

不接受 S3 存储桶 CORS 配置

为啥我的 Express.js 后端的 CORS 设置不起作用?

Spring Boot CORS 配置不接受授权标头

Express:cors 配置是不是依赖于服务器 TTL?