【问题标题】:Node js, socket.io after fixing cors error I get a new error that I can't fix修复cors错误后的Node js,socket.io我收到一个无法修复的新错误
【发布时间】: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


【解决方案1】:

Here 是可能有帮助的帖子。 要验证这是否是问题,请尝试从例如运行客户端。火狐。

【讨论】:

    猜你喜欢
    • 2015-12-13
    • 1970-01-01
    • 2019-06-01
    • 2019-05-29
    • 1970-01-01
    • 2012-10-01
    相关资源
    最近更新 更多