45

由于某种原因,我的节点服务器无法为路由提供服务/socket.io/socket.io.js,我总是收到 404 错误。
我尝试编译不同的节点版本(当前是 0.6.13,它也在服务器上运行,它实际工作的地方)。尝试调用socket.io.js时,
我从app.js得到并且没有错误。info: socket.io started

我从 localhost 和端口 8000 尝试它,我使用 express 框架

这是来自 app.js 的代码:

var express = require('express')
  , app = require('express').createServer()
  , io = require('socket.io').listen(app, { log: true });

app.listen(8000);

app.configure(function() {
    app.use(express.static(__dirname + '/public'));
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

io.sockets.on('connection', function (socket) {
   // all other stuff here
4

6 回答 6

95

请检查您的 Express 版本。Express 最近更新到 3.0alpha,其中 API 已更改。如果是 3.0,您可以将代码更改为如下所示:

var express = require('express')
  , http = require('http');

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

...

server.listen(8000);

与连接相同的问题:https ://github.com/senchalabs/connect/issues/500#issuecomment-4620773

于 2012-04-17T13:20:31.917 回答
4

与 Express 3 Web 框架一起使用:(来自 socket.io

> Express 3 要求您首先实例化 ahttp.Server以将 socket.io 附加到:

含义 - (1) 你必须创建一个服务器实例:

var app = express();
var http = require('http').createServer(app);

(2)将它与socket.io耦合:

var io = require('socket.io');
io.listen(http);

然后只有 - (3) 让服务器监听:

http.listen(8080);

确保您遵守此订单!

于 2014-01-15T15:57:36.627 回答
1

安装节点 0.8.1 后,我遇到了同样的问题。我刚刚删除了项目文件夹中的 node_modules 映射并重新安装了 express/socket.io。之后,它再次与您问题中的代码一起正常工作。

于 2012-07-03T06:33:41.817 回答
0

也许这可以帮助你,在我的 Ubuntu 11.10 上我没有正确设置NODE_PATH变量,如果你在 linux/mac 上尝试将下面的行添加到你的 .bashrc/.zshrc 文件中。

export NODE_PATH=/usr/lib/node_modules:$NODE_PATH
于 2012-04-17T12:48:29.513 回答
0

在您的存储库中安装 Socket.io:

npm install socket.io --save 

之后,配置服务器:

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

   server.listen(app.get('80')); // not 'app.listen'

在您的档案HTML/EJS或您想要的其他档案中,添加:

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

检查是否适用于Console(Chrome/Mozilla 等)。

在我的示例中,我使用 Chrome(Ctrl + shift + I):

在此处输入图像描述

于 2017-02-03T13:10:29.610 回答
0

默认端口 3000 对我不起作用,即使它没有被使用。它失败并出现 404 错误/socket.io/socket.io.js(并且没有其他通知或解释)。尝试使用您确定未使用的其他端口,它可能对您有用。

于 2022-03-06T01:07:26.813 回答