节点.js socket.io.js找不到或未定义 io

Node.js socket.io.js not found or io not defined

本文关键字:js io 未定义 找不到 节点 socket      更新时间:2023-09-26

我正在尝试在我的 freebsd 服务器上运行一个 node.js 应用程序,但我无法让 socket.io 库使用它。我尝试过包括:

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

这给出了 404 错误,如果我直接链接到该文件(即它在我的 public_html 文件夹中的位置),我会收到 io 未定义错误。

提前致谢

尝试创建另一个包含此单行的 node.js 应用程序,然后使用 node 运行它.js

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

然后在浏览器中访问http://127.0.0.1:8000,您应该得到友好的"欢迎来到 socket.io"问候。如果您得到这个,那么 socket.io 正在运行,并将提供socket.io.js文件。

我能想到的唯一另一件事是您可能没有链接到客户端文件中的备用端口。除非您在端口 80 上运行的 Express 上运行 socket.io 服务器。现在创建一个客户机文件,该文件的脚本源设置为 socket.io

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

这应该连接到在端口 8000 上运行的 socket.io 服务器并获取 socket.io.js 文件。

你的节点.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)运行(打开)您的 html 文件时遇到相同问题的人。

解决方案: 您必须通过服务器正在侦听的localhost (ex: http://localhost:3000/index.html)运行(打开)文件。

下面的代码片段显示了如何创建服务器以及如何与expresssocket.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`);
});