【问题标题】:Socket.IO Getting 404 Errors on Some URLs, but not othersSocket.IO 在某些 URL 上出现 404 错误,但在其他 URL 上却没有
【发布时间】:2019-08-14 04:13:29
【问题描述】:

我正在尝试在我的 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 实例绑定到 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客户端<script>标签上的错误?如果是<script> 标签,请显示您正在使用的脚本标签,因为它也必须使用您的路径。
  • 仅供参考,我不知道您对 resource 选项对 io.connect() 有什么期待,因为我在 the socket.io docs 中看不到这一点。
  • @jfriend00 我的头文件中包含一个 .js 脚本,它包含在我的所有其他文件中。因此, header.ejs 包含在 <%- include header %> 中。我刚刚在一个网站上看到了资源选项,迫不及待地想尝试一下。这是错误的 Chrome 控制台。 ibb.co/cg0wXRj 如您所见,这些错误出现在 example.net/user/fludo 上,但不会出现在诸如 example.net/dashboard 这样的 URL 上。
  • 请告诉我实际的<script> 标签,它包含在您的标头模板中的socket.io。我猜它需要一个领先的/ 在路径上。没有它,它只适用于没有路径的顶级 URL。
  • @jfriend00 非常感谢!我不敢相信我没有考虑到这一点。从 ``` ``` 更改为 ``

标签: javascript node.js express socket.io


【解决方案1】:

您可能需要在 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 上没有前导/。这意味着浏览器会将页面 URL 的路径与 <script> 标记中的文件名结合起来。但是,您不想使用页面的路径。你想每次都从同一个地方加载它。所以,要做到这一点,你需要改变:

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

到这里:

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

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2015-03-26
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多