如何在Node.js Express重定向上启用CORS?

时间:2018-12-14 04:40:02

标签: node.js express

我正在使用nodejs express作为后端的API。我想知道如何在redirect方法上启用CORS。

以下是我的明确重定向代码:

res.redirect(redirectUrl);

当客户端向上述API发送请求时,它将请求重定向到s3,但出现以下错误:

    Access to XMLHttpRequest at 'https://s3-ap-southeast-
2.amazonaws.com/index.html' (redirected from 
'http://localhost:9090/v0/api') from origin 'http://localhost:9090' has 
been blocked by CORS policy: Response to preflight request doesn't pass 
access control check: No 'Access-Control-Allow-Origin' header is present on
 the requested resource.

前端在http://localhost:9090下运行,并且前端域已添加到s3存储桶中的CORS中。如果我直接从浏览器将请求发送到https://s3-ap-southeast-2.amazonaws.com/index.html,它会很好地工作。因此,我认为问题出在nodejs express redirect方法上。如何为重定向启用CORS?

我知道如何启用CORS,但是我的问题与redirect有关。如何使重定向工作?

2 个答案:

答案 0 :(得分:4)

这与您的后端或前端无关,您必须在S3存储桶中添加CORS策略

请按照以下步骤在您的S3存储桶上启用CORS

  1. 登录到AWS管理控制台,然后在https://console.aws.amazon.com/s3/上打开Amazon S3控制台。

  2. 在“存储桶名称”列表中,选择要为其创建存储桶策略的存储桶的名称。

  3. 选择“权限”,然后选择“ CORS配置”。

  4. 在CORS配置编辑器文本框中,键入或复制并粘贴新的CORS配置,或编辑现有配置以使其如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
  1. 选择保存。

这应该对您有用。

参考:https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-cors-configuration.html

答案 1 :(得分:0)

CORS规则适用于相同的主机名,并且也绑定到相同的端口。因此,如果您有一个http://localhost:3001提供带有JavaScript的HTML文件,则不允许从http://localhost:3000加载内容。

要完全允许这种情况发生,并使客户端代码与服务器分离并仅加载数据,例如使用Angular,Ember,Backbone之类的框架,否则您可以在express之前使用以下中间件功能您定义路线:

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