Express.js中的条件CORS Access-Control-Allow-Origin

时间:2019-01-03 08:59:38

标签: javascript node.js express

这是关于采取策略并解决我对自己的想法的怀疑的问题。

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

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();
});

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

1 个答案:

答案 0 :(得分:0)

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

对于从.env(使用dotenv)读取的测试/产品上的数据库凭据(或使用browser screenshot或可以在服务器上修改的配置文件)进行相同配置的方式相同。

例如,如果您的.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