Nodejs代码问题

Nodejs代码问题

引用了 io= require(‘socket.io’) 但是 运行时提示 io.sockets.emit中的 io not defined。 client.connect(function(sessionId) { console.log(‘Trying to connect the railway real time service…’); io.sockets.emit(‘news’, { will: ‘Trying to connect the railway real time service…’}); client.subscribe(TRAIN_MVT_HE_TOC, function(body, headers) { //console.log(prettyjson.render(JSON.parse(body))); var t = JSON.parse(body); //console.log(t[0].header.msg_type); console.log(“recived train messages length:”+t.length);


5 回复

针对你遇到的 io.sockets.emit 中的 io not defined 的问题,这通常是因为 io 对象没有正确地被导入或者初始化。在使用 Socket.IO 时,你需要确保服务器端正确地创建了一个 Socket.IO 实例,并且客户端能够正确地连接到这个实例。

示例代码

服务器端代码 (server.js)

首先,确保你在服务器端正确地引入并初始化了 Socket.IO

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

// 创建 Express 应用程序
const app = express();

// 创建 HTTP 服务器
const server = http.createServer(app);

// 将 HTTP 服务器绑定到 Socket.IO
const io = socketIo(server);

// 监听客户端的连接事件
io.on('connection', (socket) => {
    console.log('A user connected');

    // 向所有客户端广播一条消息
    io.sockets.emit('news', { will: 'Trying to connect the railway real time service...' });

    // 处理其他逻辑...
});

// 监听端口
server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

客户端代码 (client.js 或 HTML 文件中的脚本)

然后,在客户端确保你正确地创建了一个 Socket.IO 客户端连接:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Socket.IO Test</title>
</head>
<body>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        const socket = io();

        socket.on('news', (data) => {
            console.log(data.will);
        });
    </script>
</body>
</html>

解释

  1. 服务器端

    • 首先,我们引入了必要的模块(express, http, socket.io)。
    • 然后,我们创建了一个 HTTP 服务器,并将它与 Socket.IO 实例关联起来。
    • io.on('connection', ...) 回调中,我们监听到客户端的连接,并通过 io.sockets.emit 向所有已连接的客户端发送消息。
  2. 客户端

    • 在客户端,我们通过 <script> 标签引入了 Socket.IO 客户端库。
    • 我们创建了一个新的 Socket.IO 客户端实例,并通过 socket.on('news', ...) 来监听来自服务器的消息。

通过以上步骤,你应该可以解决 io not defined 的问题,并且客户端能够正确地接收到服务器发送的消息。


io = require("socket.io") 写在哪的?

我建议还是版聊, 说不定以后有人会搜到这篇帖子解决跟你一样的问题.

可以把完整代码贴出来么?

var prettyjson = require(‘prettyjson’), fs = require(‘node-fs’), io= require(‘socket.io’), StompClient = require(‘stomp-client’).StompClient; var TRAIN_MVT_HE_TOC = ‘/topic/TRAIN_MVT_HE_TOC’; var client = new StompClient(‘datafeeds.networkrail.co.uk’, 61618, ‘Jordy@connectedliverpool.co.uk’, ‘Newyork%212+’, ‘1.0’);

client.connect(function(sessionId) { console.log(‘Trying to connect the railway real time service…’); io.sockets.emit(‘news’, { will: ‘Trying to connect the railway real time service…’}); client.subscribe(TRAIN_MVT_HE_TOC, function(body, headers) { //console.log(prettyjson.render(JSON.parse(body))); var t = JSON.parse(body); //console.log(t[0].header.msg_type); console.log(“recived train messages length:”+t.length);

var movementarraybn = new Array(); for(var i in t){

//console.log(t[i].header.msg_type[3]);

switch(t[i].header.msg_type[3]-‘0’){ case 1: var stream = fs.createWriteStream(‘activation.json’, {‘flags’: ‘a’}); stream.write(JSON.stringify(t[i])+"\n"); stream.end(); parse_ActMsg(t[i]); break;

case 2: parse_CanMsg(t[i]); break;

case 3: movementarray.push(t[i]); break;

case 4:

break;

case 5:

break;

case 6:

break;

case 7: parse_ChangeName(t[i]); break;

case 8: break; } }

updateTrainInfos(movementarray); });

client.on(‘CON NECTED’, function () { console.log(’ on connection '); });

client.on(‘ERROR’,function(){ console.log(‘on error’); }) }) })

根据你的描述,错误提示 io.sockets.emit 中的 io not defined 表明在你的代码中没有正确地引入或初始化 socket.io

你可以尝试以下步骤来解决这个问题:

  1. 确保你已经安装了 socket.io

    npm install socket.io
    
  2. 在服务器端正确引入和初始化 socket.io。假设你使用的是 Express 框架:

    const express = require('express');
    const http = require('http');
    const socketIo = require('socket.io');
    
    const app = express();
    const server = http.createServer(app);
    
    // 初始化 socket.io
    const io = socketIo(server);
    
    // 监听连接事件
    io.on('connection', (socket) => {
        console.log('A user connected');
    
        // 发送消息给客户端
        socket.emit('news', { will: 'Trying to connect the railway real time service...' });
    
        socket.on('disconnect', () => {
            console.log('User disconnected');
        });
    });
    
    // 启动服务器
    server.listen(3000, () => {
        console.log('Server is running on port 3000');
    });
    
  3. 在客户端正确连接到服务器,并接收消息:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Socket.IO Test</title>
        <script src="/socket.io/socket.io.js"></script>
        <script>
            var socket = io('http://localhost:3000');
    
            socket.on('news', function(data) {
                console.log(data.will);
            });
        </script>
    </head>
    <body>
        <h1>Socket.IO Test</h1>
    </body>
    </html>
    

这样,你应该可以避免 io not defined 的错误,并且能够正常发送和接收消息。确保你的服务器和客户端都在运行,并且客户端能够访问到服务器。

回到顶部