Nodejs 新人学习求助

Nodejs 新人学习求助

现在正在看《node.js入门经典》,里面有段代码不知道问什么无法执行 app.js代码如下 var express = require(‘express’);

var app = express();

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

app.listen(3000);

app.get('/', function (req, res){
    res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket){
    socket.emit('welcome', {text: 'OH HAI! U R CONNECTED!'});
});

index.html代码如下

<!DOCTYPE html> <html lang=“en”> <head> <meta charset=“utf-8”/> <title>Socket.IO Express Example</title> </head> <body> <h1>Socket.IO Express Example</h1> <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect(); socket.on(‘welcome’, function (data){ console.log(‘data.text’); }); </script>

	</body>
</html>

总是报错无法找到/socket.io/socket.io.js


10 回复

在你提供的代码中,有几个地方需要修改才能使你的应用正常运行。主要问题在于如何正确地配置 socket.io 以及如何引用 Socket.IO 的客户端库。

修正后的代码

app.js

var express = require('express');
var app = express();
var server = require('http').createServer(app); // 创建 HTTP 服务器
var io = require('socket.io')(server); // 使用 HTTP 服务器实例来创建 Socket.IO 实例

app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html'); // 使用 sendFile 方法
});

io.on('connection', function (socket) {
    socket.emit('welcome', { text: 'OH HAI! U R CONNECTED!' });
});

server.listen(3000, function () {
    console.log('App is running on port 3000');
});

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Socket.IO Express Example</title>
</head>
<body>
    <h1>Socket.IO Express Example</h1>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect(); // 连接到 Socket.IO 服务器
        socket.on('welcome', function (data) {
            console.log(data.text); // 正确打印 data.text
        });
    </script>
</body>
</html>

解释

  1. 创建 HTTP 服务器:你需要使用 http.createServer() 方法来创建一个 HTTP 服务器,并将它传递给 socket.io。这是因为在 Node.js 中,socket.io 需要一个 HTTP 服务器来监听 WebSocket 连接。

    var server = require('http').createServer(app);
    
  2. 使用正确的 app.listen 方法:在上面的代码中,我们使用了 server.listen(3000) 来启动服务器。这样可以确保 socket.io 能够正确地与服务器通信。

    server.listen(3000, function () {
        console.log('App is running on port 3000');
    });
    
  3. 发送文件:使用 res.sendFile() 方法代替 res.sendfile() 方法。虽然两者功能相似,但 sendFile 是更现代的用法。

    res.sendFile(__dirname + '/index.html');
    
  4. 修正 Socket.IO 客户端事件处理:在客户端脚本中,确保你在 console.log 中正确地引用了 data.text,而不是字符串 'data.text'

    socket.on('welcome', function (data) {
        console.log(data.text); // 正确打印 data.text
    });
    

通过这些修改,你的应用应该能够正确地启动并处理 Socket.IO 连接。希望这能帮助你解决问题!


新人不太懂格式,看起来有点奇怪,还请各位大神将就点看哈

/socket.io/socket.io.js 由 socket.io 模块提供。你的 socket.io 模块安装了吗?

下面这行,执行时有没有错误信息? var io = require(‘socket.io’).listen(app);

程序执行没有错误,但是看javascript的输出时会提示无法io是未定义变量

直接取也不行,提示找不到socket.io.js

socket.io网站: Express 3 requires that you instantiate a http.Server to attach socket.io to first:

所以你的代码改一下:

var app = require(‘express’)() , server = require(‘http’).createServer(app) , io = require(‘socket.io’).listen(server);

server.listen(3000);

确实是啊,多谢啦

可能是版本的问题,node.js更新很快

你好,根据你提供的代码,问题出在index.html文件中引用的socket.io.js路径不正确。你需要确保socket.io.js可以被正确访问。以下是修正后的代码示例:

app.js

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

server.listen(3000);

app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
    socket.emit('welcome', { text: 'OH HAI! U R CONNECTED!' });
});

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Socket.IO Express Example</title>
</head>
<body>
    <h1>Socket.IO Express Example</h1>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect();
        socket.on('welcome', function (data) {
            console.log(data.text);
        });
    </script>
</body>
</html>

说明

  1. 使用http模块创建服务器:在Express应用中,需要使用http模块创建一个HTTP服务器,然后将这个服务器传递给socket.io
  2. 使用sendFile方法:使用expresssendFile方法来发送HTML文件,而不是sendfile(注意大小写)。

通过以上修改,你应该能够解决找不到/socket.io/socket.io.js的问题。希望这对你有帮助!

回到顶部