如何为 nodejs Express 服务器启用 CORS?

Posted

技术标签:

【中文标题】如何为 nodejs Express 服务器启用 CORS?【英文标题】:How to enable CORS for nodejs Express server? 【发布时间】:2019-08-14 16:37:36 【问题描述】:

我正在尝试在前端使用 Ajax 请求:

$.ajax(
    type: "GET",
    url: "localhost:3000/send",
    beforeSend:function()
             $(".loading_msg").hide();
        ,
    complete:function()
             $(".loading_msg").show();
        
);

但是当我加载包含脚本的页面时,我收到以下错误:

在 'localhost:3000/send' 从源访问 XMLHttpRequest 'http://localhost:3000' 已被 CORS 策略阻止:跨源 请求仅支持协议方案:http、data、chrome、 chrome 扩展,https。

未检查的 runtime.lastError:消息端口在响应之前关闭 收到了。

我尝试了很多东西,比如添加一个中间件来表达如下:

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

这没什么区别。

我也尝试安装 cors npm 包并做到了

const cors=require('cors')
app.use(cors())
app.options('*', cors());

这也没什么区别。

我还尝试通过添加 https:// 来更改 ajax URL

 url: "https://localhost:3000/send",

虽然这确实消除了 CORS 错误,但它给了我另一个错误:

GET https://localhost:3000/sendnet::ERR_SSL_PROTOCOL_ERROR

如何在使用 localhost 时从 Nodejs express 服务器发送 Ajax 请求?

【问题讨论】:

app.use(cors()) 放在哪里很重要。确保在安装任何路线之前拨打电话 请查看***.com/questions/55320833/… @miyu app.use(cors()) 是我所有的路线。 @Ashok 你链接到我自己的问题。 【参考方案1】:

您的 cors 错误消息清楚地表明您在发出请求时需要使用 http

$.ajax(
    type: "GET",
    url: "http://localhost:3000/send",
    beforeSend:function()
             $(".loading_msg").hide();
        ,
    complete:function()
             $(".loading_msg").show();
        
);

【讨论】:

无法运行代码时,sn-p 的意义何在。此外,如果您正确阅读了问题,op 也尝试过使用 http 不写任何东西并不能确保它是一个 http 它可以是 TLS/SSL、FTP、HTTP、SMTP 等 cors 在发出 OPTIONS 请求时需要知道的任何东西。@vikrant 啊,我明白了。我将它与原始网址混合在一起。 我真的不明白为什么 https 不起作用,但 http 起作用,但我会接受。谢谢 @jedu 你是在 https 上启动你的服务器吗?使用 https 模块?那么只有它可以与 https 一起使用。【参考方案2】:

您将需要这个受欢迎的软件包,CORS。 另一种解决方法是添加后端到您的 webapp,使用 express 服务器并使用 axios/request npm 包使用 http 从 API 服务器请求数据,那么您将不会遇到任何 CORS 问题。

【讨论】:

以上是关于如何为 nodejs Express 服务器启用 CORS?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 apollo-server-lambda 启用 cors

如何为 api 部署 node js express js,为前端部署 react js,为管理员部署 angular

如何用express nodejs 创建web服务器

如何在 nodejs express 重定向上启用 CORS?

如何为生产准备 nodejs?

NodeJS:如何为测试服务器创建一个假的 tcp 套接字