是 nginx 服务器特有的 CORS 错误还是我应该在我的代码中添加一些内容

Posted

技术标签:

【中文标题】是 nginx 服务器特有的 CORS 错误还是我应该在我的代码中添加一些内容【英文标题】:Is CORS error specific to the nginx server or should I add something to my code 【发布时间】:2021-10-11 06:25:35 【问题描述】:

我最近首次部署了一个网站。我们有 2 台服务器,可以说:'https://baseUrl.com' 和 'https://api.baseUrl.com' 来发出请求。

当尝试提交联系表单时,数据会上传到 mongoDB,但不会发送到 node.js 或从 node.js 发送到我们的电子邮件地址(我不知道具体) 并且我收到此错误:从源“https://baseUrl.com”访问“https://api.baseUrl.com”的 XMLHttpRequest 已被 CORS 策略阻止:没有“访问控制允许源”请求的资源上存在标头。

我无权访问 nginx 服务器,但我被告知已设置特定的 CORS 标头。

我该怎么办?有什么我可以在我的代码中写的东西来解决这个问题还是严格来说是服务器问题?

例如,我尝试在 node.js 上添加此代码,但没有帮助

app.use(function(req, res, next) 
  res.header("Access-Control-Allow-Origin", "YOUR-DOMAIN.TLD"); // update to match the domain you will make the request from
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
);

由于 CORS 错误而未执行的代码示例:

app.post('/api/*endpoint*',(req,res) => 
  upload(req,res,function(err)
    if(err)
        return res.end("Something went wrong!");
    else            
      let mailOptions = 
          from: req.body.email,
          to: '*email*',
      ;
      transporter.sendMail(mailOptions, function(err) 
          if (err) 
              return res(err);
          
      )
    
  )
);

【问题讨论】:

【参考方案1】:

您可以使用 cors express 中间件来避免 cors 麻烦。示例用法如下。在使用之前,您必须通过键入“npm i cors”来安装 npm 包

var express = require('express')
var cors = require('cors')
var app = express()
 
app.use(cors())
 
app.get('/products/:id', function (req, res, next) 
  res.json(msg: 'This is CORS-enabled for all origins!')
)
 
app.listen(80, function () 
  console.log('CORS-enabled web server listening on port 80')
)

【讨论】:

我的项目中已经安装了 cors。我在最初的问题中添加了一个示例。这种语法可以吗,还是 res.json(msg) 有影响?

以上是关于是 nginx 服务器特有的 CORS 错误还是我应该在我的代码中添加一些内容的主要内容,如果未能解决你的问题,请参考以下文章

使用 NGINX 和 AWS Elastic Beanstalk 配置 CORS

Angularjs + Spring-boot + nginx的CORS问题

CORS 仅阻止 localhost 请求

使用 Nginx 的 socket.io 出现 CORS 错误

如何在 keycloak 和 nginx 上配置 cors?

使用 socket.io / nginx / node 时出现 CORS 错误