javascript - Socket.IO 在某些 URL 上出现 404 错误,但在其他 URL 上则不会

标签 javascript node.js express socket.io

我正在尝试在我的 Web 应用程序中使用 Socket.IO,到目前为止效果很好。然而,我长期以来一直试图解决一个特定问题,但找不到其他人也有同样的问题。 Socket.IO 在仅是 site.com/example 的 URL 上工作得很好,但是,当我在域上堆叠路径时,我在 socket.IO 中收到 404。例如,site.com/user/example 显示 socket.IO 的 404。在日志中,当需要访问 site.com/socket.io 时,它会尝试访问 site.com/user/socket.io/... 上的 socket.IO。它似乎只替换最后一个/之后的 url,因此 site.com/ex/a 会尝试在 site.come/ex/socket.io 获取 socket.io。(我正在使用 ExpressJS,我不知道这是否相关。)

我尝试设置 socket.io 在客户端脚本中使用的路径和资源。另外,我在将 socket.io 实例绑定(bind)到 http 服务器时包含了路径。

这是我的服务器端代码。

var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server, {path: '/socket.io'});

这是我的客户端代码。

var socket = io.connect('https://example.net', {
    path: '/socket.io',
    resource: '/socket.io',
    transports: ['websocket'],
    upgrade: false
})

非常感谢您的帮助! (我很抱歉这个问题的格式不正确,这是我第一次在 StackOverflow 上提问!)

最佳答案

您可能需要在 socket.io 脚本标记上添加一个前导斜杠。

最大的线索是当你说你的socket.io时当页面 URL 为 https://example.net/dashboard 时加载脚本,但在 https://example.net/user/fludo 时不会加载。并且,屏幕截图显示它尝试从 https://example.net/user/fludo/socket.io/socket.io.js 加载脚本。这确实是一条错误的道路。

问题是你的<script>标签正在使用不带前导的页面相对链接 /在网址上。这意味着浏览器会将页面 URL 的路径与 <script> 中的文件名结合起来。标签。但是,您不想使用页面的路径。您希望每次都从同一个位置加载它。因此,要做到这一点,你需要改变:

<script src="socket.io/socket.io.js"></script>

对此:

<script src="/socket.io/socket.io.js"></script>

关于javascript - Socket.IO 在某些 URL 上出现 404 错误,但在其他 URL 上则不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57470125/

相关文章:

javascript - 读取文件以在快速路径中使用

javascript - jQuery .append() 没有换行符

javascript - 使用 node.js 的 mailchimp-api 插件将用户添加到 mailchimp 邮件列表

node.js - CKEditor 内联于 Node.js

javascript - 我如何生成 token ?

node.js - 我的两个变量有时不相等,但必须相等

javascript getDay() 显示错误日期的旧日期

javascript - jQuery 表格排序更改按列排序的颜色 :

javascript - 将值写入表单字段 - 值写入多次

javascript - 如何在 puppeteer 中让页面等到导航未完成