gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:05 25 4
gpt4 key购买 nike

我正在尝试在我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com