无法与 node.js 服务器通信
Posted
技术标签:
【中文标题】无法与 node.js 服务器通信【英文标题】:Failure to communicate with node.js server 【发布时间】:2021-09-13 00:07:25 【问题描述】:我一直在关注 youtube 上的教程,https://www.youtube.com/watch?v=ppcBIHv_ZPs。 本教程展示了如何使用 socket.io 设置基本服务器,并让两个人玩经典的贪吃蛇游戏。
尝试设置与服务器和客户端的通信后,我在客户端的开发者控制台中收到错误消息。
我收到的第一个错误是
127.0.0.1/:1 从源“http://127.0.0.1:8080”访问“http://localhost:3000/socket.io/?EIO=3&transport=polling&t=NfTLuxq”的 XMLHttpRequest ' 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。
然后我在这里寻求帮助,并收到了有关处理 cors 错误的良好反馈。 所以我然后搜索了如何使用 socket.io 处理 cors 并将我的代码修改为 我的 server.js 文件中的以下内容。
我修改了我的代码
const io = require('socket.io')();
到
const io = require("socket.io")(
cors:
origin: "http://localhost:8080",
methods: ["GET", "POST"]
);
但是我现在收到另一个错误代码如下:
CORS 已阻止从源“http://127.0.0.1:8080”访问“http://localhost:3000/socket.io/?EIO=3&transport=polling&t=NfUXfLP”处的 XMLHttpRequest策略:响应中“Access-Control-Allow-Credentials”标头的值为“”,当请求的凭据模式为“包含”时,该值必须为“真”。 XMLHttpRequest 发起的请求的凭证模式由 withCredentials 属性控制。
我想一旦我按照我的理解允许源访问,我就可以从客户端连接到端口 3000。任何帮助理解此错误将不胜感激!谢谢。
然后我将凭据标志添加到我的 server.js 文件中
const io = require("socket.io")(
cors:
origin: "http://127.0.0.1:8080/",
methods: ["GET", "POST"],
credentials: true
);
并再次收到第一个错误。这只是不想工作。
CORS 已阻止从源“http://127.0.0.1:8080”访问“http://localhost:3000/socket.io/?EIO=3&transport=polling&t=NfUsnNV”的 XMLHttpRequest策略:“Access-Control-Allow-Origin”标头的值“http://127.0.0.1:8080/”不等于提供的来源。
【问题讨论】:
去掉斜杠 【参考方案1】:数字 0 和“/”不一样,如果你在 NodeJS 中查看你想要的字符串,它以“/”结尾,所以从 yow cors contig 中删除它,也总是更喜欢 localhost 而不是 127.0.0.1。本地主机被视为安全域
.......
复制粘贴
/**
WHAT EVER URL YOU SET HERE HAS TO BE THE EXACT SAME URL YOU PUT O N YOW BROWSER. SAME EXACT
*/
const io = require("socket.io")(
cors:
origin: "http://localhost:8080",
methods: ["GET", "POST"],
credentials: true
);
然后在浏览器上粘贴http://localhost:8080
【讨论】:
出于某种原因,我将其切换到 localhost:8080 bur,我现在收到此错误。 “Access-Control-Allow-Origin”标头的值“localhost:8080”不等于提供的来源。 感谢您的解决方案在我完成后有效,因此客户端和服务器的 socket.io 都是相同的。以上是关于无法与 node.js 服务器通信的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Android 客户端和 Node.js socket.io 服务器之间进行通信
使用 AFNetworking 或 JSONKit 与 Node.js express 网络服务器通信
让node.js与其它语言进行通信(thrift),并使用zookeeper做服务协同