无法与 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 中与数据库通信

让node.js与其它语言进行通信(thrift),并使用zookeeper做服务协同

Node.js权威指南 - 实现基于TCP与UDP的数据通信

Rhino -> Node.js 通信