我正在尝试在我的 freebsd 服务器上运行 node.js 应用程序,但我无法让 socket.io 库使用它。我试过包括:
<script src="/socket.io/socket.io.js"></script>
这给出了 404 错误,如果我直接链接到该文件(即它在我的 public_html 文件夹中的位置),我会得到 io not defined 错误。
提前致谢
我正在尝试在我的 freebsd 服务器上运行 node.js 应用程序,但我无法让 socket.io 库使用它。我试过包括:
<script src="/socket.io/socket.io.js"></script>
这给出了 404 错误,如果我直接链接到该文件(即它在我的 public_html 文件夹中的位置),我会得到 io not defined 错误。
提前致谢
尝试创建另一个包含这一行的 node.js 应用程序,然后使用 node.js 运行它
var io = require('socket.io').listen(8000);
然后在您的浏览器访问中http://127.0.0.1:8000
,您应该会得到友好的“欢迎来到 socket.io”。问候。如果你得到这个,那么 socket.io 正在运行并将提供 socket.io.js 文件。
我能想到的唯一可能发生的事情是您可能没有链接到客户端文件中的备用端口。除非您在 express 上运行 socket.io 服务器,该服务器在端口 80 上运行。现在创建一个客户端文件,将 socket.io 的脚本源设置为
<script src="http://127.0.0.1:8000/socket.io/socket.io.js"> </script>
这应该连接到在端口 8000 上运行的 socket.io 服务器并获取 socket.io.js 文件。
您的 node.js 应用程序仍然必须为其提供服务 - 它不会自动提供服务。你的服务器里有什么?它应该是这样的
var app = require('express').createServer();
var io = require('socket.io').listen(app);
或类似的(这listen
很重要)。该位置不是磁盘上的真实位置 - 据我了解,socket.io 库应该拦截 URL 并为其客户端库提供服务。
在正文解析器之后添加以下内容:
, express.static(__dirname + "/public")
所以像:
var app = module.exports = express.createServer(
express.bodyParser()
, express.static(__dirname + "/public")
);
如果他们直接从您的local file directory(ex: file:///C:/Users/index.html)
.
解决方案:您必须通过localhost (ex: http://localhost:3000/index.html)
服务器正在侦听的位置运行(打开)文件。
下面的代码片段显示了如何创建服务器以及如何express
与socket.io
const express = require("express");
const app = express();
const httpServer = require("http").createServer(app);
const io = require("socket.io")(httpServer);
///////////////////////////////////////////////////////////////
// Any other server-side code goes here //
//////////////////////////////////////////////////////////////
httpServer.listen(3000, () => {
console.log(`Server listening to port 3000`);
});