无法获取 socket.io.js

Posted

技术标签:

【中文标题】无法获取 socket.io.js【英文标题】:Can't get socket.io.js 【发布时间】:2014-02-17 08:35:32 【问题描述】:

我实际上在做一个小项目,我应该用 node.js、mongoDB、socket.io 和 canvas 重新创建一个绘图多人游戏。

抽屉工作得很好,服务器似乎也工作得很好。我的注册/登录/会话和数据库启动并正常工作,唯一的问题是 socket.io。当用户加入游戏室时,他可以看到抽屉和工具,但没有连接。为什么 ?浏览器找不到socket.io.js。

我做了什么:

我验证它是否已安装,它是使用 npm install socket.io 安装的。 我在打开服务器时检查了服务器是否正在启动它:在我的控制台中出现“socket.io started”。 我检查了我的 html 代码,这里是:

<script type="text/javascript" src="/socket.io/socket.io.js"></script>

根据数十亿的教程/开发站点/帮助主题,这应该是可行的。但事实并非如此。打开浏览器的控制台时,我得到了这个:

X GET http://localhost:1337/socket.io/socket.io.js NOT FOUND.

我不知道问题出在哪里,我无法解决这个问题,这让我非常头疼..所以我在这里。

提前感谢您的帮助! :)

【问题讨论】:

你有 nodejs 正确地提供静态文件吗?你在哪里为 socket.io 提供服务? 我的项目的根目录是 server.js 文件。在变量中,我得到了 var io = require('socket.io').listen(server);然后,当用户到达需要 socket.io 的页面时,服务器会这样做: io.sockets.on('connection', function(socket) console.log('Client connected'); )静态文件,我觉得也不错,我得到了这个:.use('/public', express.static(__dirname + '/public')) 该文件不是由静态中间件提供的,而是由socket.io 模块本身提供的。可能是配置错误,能把初始化Express和socket.io的代码展示一下吗? express = require('express'), server = express(), io = require('socket.io').listen(server), [其他用于 DB 模型等的东西] 我是对此很新,对网络开发不是很好,我可能(显然?)错误配置了一些东西:) socket.io.js not found 的可能重复项 【参考方案1】:

鉴于您评论中的代码,您没有使用正确的变量来初始化socket.io

试试这个:

var express = require('express');
var app     = express();
var server  = app.listen(1337);
var io      = require('socket.io').listen(server);
...

因此,与其在 Express 应用实例上使用 socket.io 'listen' ,它应该侦听 app.listen(...) 返回的内容(恰好是 http.Server 实例)。

【讨论】:

是的,这行得通!我忘记了应用程序/服务器的事情。现在我的 socket.io.js 被检测到了!它几乎可以工作了。几乎,因为在我的 server.js 中,当用户使用 socket.io 进入页面时,我会这样做: io.sockets.on('connection', function(socket) console.log('User connected');但是我没有向我展示这个,而是得到了这个:调试 - 提供静态内容 /socket.io.js。对此有任何想法吗?如果没有,非常感谢,你真的帮助了我! @YumeYume 这取决于你把代码放在哪里。它应该(通常)位于主 JS 文件的顶层;或者换句话说,不是在 Express 路由处理程序或类似的东西中。 好的,我试试,不过这个题目的主要问题已经解决了。谢谢你帮助我! 这解决了我使用var io = require('socket.io').listen(); 而不是var io = require('socket.io').listen(server); 的问题,导致Cannot GET /socket.io/socket.io.js 错误。我忘记将server 对象传递给socket.io

以上是关于无法获取 socket.io.js的主要内容,如果未能解决你的问题,请参考以下文章

错误:您所请求的网址(URL)无法获取 怎么搞的?

无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥

无法在VSTS版本中获取Azure Vault密钥 - 无法获取JWT

怎么解决电脑无法自动获取IP地址呢?

"您所请求的网址(URL)无法获取"怎么解决

为啥Android有时无法获取位置