【发布时间】:2021-03-21 09:08:11
【问题描述】:
我是 Web 开发、javascript 和节点 js 的新手。 我知道已经有很多关于 cors 错误的问题我已经花了 2 天时间研究我的问题的解决方案,但我不知道如何解决这个 cors 错误。 昨天经过 2 天的搜索,我终于找到了一个最初有效的解决方案,但现在它只有 20% 的时间有效,而另外 80% 的时间我又遇到了另一个错误。 我设置了我的 socket.io 并尝试通过 socket.io 发送套接字,正如这个 youtube 视频中所示: https://www.youtube.com/watch?v=rxzOqP9YwmM&t=5s 尽管我的代码与视频中的代码完全相同,但在发送套接字时却不断收到 cors 错误。
这是我的一些服务器端代码:
const io = require("socket.io")(3000);
var fs = require('fs');
io.on("connection", socket => {...
这是我的一些客户端代码:
const socket = io("http://localhost:3000");
socket.on("new_partner", recieved_data => {
partner_user.username = recieved_data;
socket.emit("logged_in", this_user.username);
});
...
这是我的 html 的头部:
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<meta charset="utf-8">
<title>real time chat</title>
<link rel="stylesheet" href="chat_room.css">
<script defer src="http://localhost:3000/socket.io/socket.io.js"></script>
<script defer src="script.js"></script>
<script defer src="login.js"></script>
</head>
这是我在上面的代码中不断遇到的 cors 错误:
CORS 策略已阻止从源“null”访问“http://localhost:3000/socket.io/?EIO=4&transport=polling&t=NP9ZPIk”处的 XMLHttpRequest:没有“访问控制-请求的资源上存在 Allow-Origin' 标头。
经过大量搜索后,我将服务器端代码更改为:
const io = require("socket.io")(3000, { cors: { origin: "*", }, });
var fs = require('fs');
io.on("connection", socket => {
我第一次运行新代码时一切正常。经过一些额外的测试,我很快意识到这种方法只有 20-30% 的时间有效。另外 70% 的时间里,我不断收到一些其他随机错误。今天,当我试图重现错误以便能够在 StackOverflow(此处)上寻求帮助时,我不再遇到与昨天相同的错误。我不知道到底发生了什么,因为我是 Web 开发的初学者,但是当我尝试从客户端向服务器发送套接字时,我一直遇到以下错误:
GET http://localhost:3000/socket.io/socket.io.js net::ERR_CONNECTION_REFUSED
Uncaught ReferenceError: io is not defined 在 script.js:1
未捕获的引用错误:未定义套接字 在 login.js:1
我还应该提到,使用这种新方法与 cors 错误不同,我可以加载我的网站,但是一旦我尝试发送套接字,就会在控制台中弹出错误。
我知道这可能是基本的,其中一天我真的需要坐下来彻底查看 socket io 文档,但我现在真的没有时间处理这个项目的截止日期。 再次为我的无知道歉并提前感谢。 如果有帮助,这是我的所有代码:
html(index.html): https://pastebin.com/RQ7zNzdy
客户端脚本(script.js):https://pastebin.com/1P0DJ6HH
客户端登录(script.js):https://pastebin.com/fqtNRQvg
服务器端脚本(server.js):https://pastebin.com/NTL6ynup
我网站的css(没关系):https://pastebin.com/24rF8urG
【问题讨论】:
-
CORS 错误只是 ERR_CONNECTION_REFUSED 问题的副作用。如果您修复了导致 ERR_CONNECTION_REFUSED 问题的任何原因,您会发现现有的 CORS 确认已按预期工作。
-
@sideshowbarker 我更新了错误代码,因为我发现我发布了错误的错误代码......我很草率。关于您的评论:感谢您的提示,如果我直到明天醒来时才能得到明确的答案,我将进一步调查 ERR_CONETION_REFUSEED_ 错误。
标签: node.js http socket.io request