我正在try 允许CORS进入 node .但问题是,如果设置了Access-Control-Allow-Credentials,我不能将*设置为Access-Control-Allow-Origin.

规范还说我不能为Access-Control-Allow-Origin做数组或逗号分隔的值,建议的方法是做类似于这个Access-Control-Allow-Origin Multiple Origin Domains?的事情

但我在node中似乎不能这样做.js

["http://example.com:9001", "http://example.com:5001"].map(domain => {
  res.setHeader("Access-Control-Allow-Origin", domain);
});
res.header("Access-Control-Allow-Credentials", true);

这里的问题是它被数组中的最后一个值覆盖,所以头将被设置为res.setHeader("Access-Control-Allow-Origin", "http://example.com:5001");

来自客户端浏览器的错误:

XMLHttpRequest无法加载http://example.com:9090/api/sync.这个

推荐答案

下面是我在express应用程序中使用的允许多个来源的内容

app.use((req, res, next) => {
  const allowedOrigins = ['http://127.0.0.1:8020', 'http://localhost:8020', 'http://127.0.0.1:9000', 'http://localhost:9000'];
  const origin = req.headers.origin;
  if (allowedOrigins.includes(origin)) {
       res.setHeader('Access-Control-Allow-Origin', origin);
  }
  //res.header('Access-Control-Allow-Origin', 'http://127.0.0.1:8020');
  res.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.header('Access-Control-Allow-Credentials', true);
  return next();
});

Node.js相关问答推荐

如何从puppeteer的page. evaluate()中获取流数据?(node.js)

Spotify Auth访问令牌给出错误代码400

如何防止Socket-io实例化React/Next.js中的两个套接字(当前在服务器*和*客户端实例化)

当变量在另一个文件中初始化时,在初始化错误之前无法访问变量

如何使用NodeJS在mongodb中更新文档

我的 MERN 网站一直告诉我我的一个函数不是一个函数

Mongodb - 在数组数组中查找()

当try 将 formData 转换为 express js 时,服务器无法识别 multipart/form-data

如何获取文件的中间值?

结合后端(Express)和前端(Angular)路由

Electron 模板(Typescript + Webpack)中的这个 Electron Forge ERROR 是什么?

Mongoose,如何一次更新多个?

使用restify时如何支持cors

Base64 编码一个 javascript 对象

如何使用 Node.js 将 base64 编码图像(字符串)直接上传到 Google Cloud Storage 存储桶?

Node应用程序中相同npm包的两个版本

Node.js - 判断是否安装了模块而不实际需要它

NPM:为什么要安装这个包?

从 JavaScript 文件或 REPL 中 require()'ing CoffeeScript 文件

Mongoose:模式与模型?