javascript - Express.js 中的条件 CORS 访问控制允许来源

标签 javascript node.js express

这是一个关于采取策略和解决我对我的想法的疑虑的问题。

我想要的是允许 CORS 请求,即。 Access-Control-Allow-Origin 取决于我拥有的环境类型。所以这是我的 cors header :

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', 'https://siteone.com');
  res.setHeader('Access-Control-Allow-Credentials', 'true');
  res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT,DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization, access-control-allow-origin');
  next();
});

但我想要的是这样的条件逻辑:

const ACAOSite = process.env.NODE_ENV == 'production' ? 'https://siteone.com' : 'https://sitetwo.com';

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', ACAOSite);
  res.setHeader('Access-Control-Allow-Credentials', 'true');
  res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT,DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization, access-control-allow-origin');
  next();
});

不过这是好的做法吗?还有另一种方法吗?另外,我不想允许每个站点都使用 *,我想选择要允许的站点。

最佳答案

使用dotenv或配置文件来设置您允许的来源。

与从 .env(使用 dotenv)或可在服务器上修改的配置文件读取的测试/生产数据库凭据的不同配置相同。

例如,如果您的 .env 文件包含:

allowed_origins=https://siteone.com

那么你的代码应该是这样的:

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', process.env.allowed_origins);
  res.setHeader('Access-Control-Allow-Credentials', 'true');
  res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT,DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization, access-control-allow-origin');
  next();
});

您还可以使用多个来源逗号分隔,例如

allowed_origins=https://siteone.com, https://siteone-server2.com

关于javascript - Express.js 中的条件 CORS 访问控制允许来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54019064/

相关文章:

javascript - 在 Firestore 中分配增量用户 ID 号

node.js - 大型多文件 Node 项目中的 require()

node.js - Express.js/Node.js : Order of Routes important and where to put next()?

node.js - findByID 不是函数

javascript - Angular 响应式表单提交事件

javascript - 在单独的渲染之间共享 React 组件逻辑

javascript - If 语句使用每个数组键

node.js - 在整个 Node 项目上使用 UglifyJs?

node.js - 重复询问带 Node 的用户输入?

javascript - Express json() 创建奇怪的 JSON(键与值合并)