如何为 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