【问题标题】:Socket.io doesn't correctly attach to http server in express applicationSocket.io 未正确连接到 express 应用程序中的 http 服务器
【发布时间】:2014-09-19 18:46:23
【问题描述】:

我对 NodeJS 还是很陌生,并试图让 Socket.IO 与 Express 应用程序一起运行。我试图尽可能贴近文档和教程,但最后,在客户端找不到 socket.io.js。

服务器启动如下:

var app = require('../app');
app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() { debug('...') } );

路由/服务页面:

var express = require('express');
var router = express.Router();

router.get('/', function (req, res) {
    res.render('index', { title: 'Express' });
});

包括socket.io:

var express = require('express');
var http = require('http').Server(express);
var io = require('socket.io')(http);

在 HTML 文件中,对于客户端:

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

但是在加载页面时,这个 JS 文件永远找不到。我怀疑通过先前创建的 http 服务器包含 socket.io 是错误的......还是我错过了其他东西?

更新

我刚刚发现包含socket.io的snipped是在服务器启动之前执行的(第一个sn-p)。它们位于不同的文件中,服务器启动一个(名为www.js)在package.json 中配置为“启动”脚本,而另一个(websockets.js)则间接需要。

如果我放了

var io = require('socket.io')(server);

在www.js 结尾处,一切正常。但是有没有办法从之前加载的websockets.js 做到这一点,例如通过服务器启动回调函数?

【问题讨论】:

  • 查看其他在线教程。

标签: node.js express socket.io


【解决方案1】:

尝试指定完整路径,像这样

<script src="http://localhost:8000/socket.io/socket.io.js"></script>

并从客户端连接到您的服务器:

var socket = io.connect('http://localhost:8000/');

还要检查socket.io 模块是否在您的node_modules 目录中可用。

【讨论】:

  • 是的,模块在那里,硬编码路径也不起作用。但我有一些新发现,现在会更新问题。
猜你喜欢
  • 2014-10-03
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 2014-03-12
相关资源
最近更新 更多