无法获取 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的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥