-1

如何解决这个问题?没看懂,求大神帮忙,谢谢 这是我运行 node server.js 时的错误消息:

client.on('getRelay', function (state) { ReferenceError: client is not defined

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

let bodyRelay = {
    relayId: 'RELAY-123',
    state: 1
}

app.use(express.static(__dirname + '/node_modules'));
app.get('/', function(req, res, next) {
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(client) {
    console.log('a user has connected');

});

io.sockets.emit('setRelay', bodyRelay);
client.on('getRelay', function (state) {
    bodyRelay = state;
    console.log('id: ' + client.id + 'bodyRelay: ' + JSON.stringify(bodyRelay));
    // io.sockets.emit('setRelay', bodyRelay);
});

client.on('disconnect', function() {
    console.log('a user has disconnected');
});

server.listen(port, () => {
    console.log('Server is running on port: ' + port)
});

4

1 回答 1

0

引用 , 的代码块client必须在此回调中:

io.on('connection', function(client) {
    console.log('a user has connected');

});

因为那是client定义的地方。像这样:

io.on('connection', function(client) {
    console.log('a user has connected');

    client.on('getRelay', function (state) {
        bodyRelay = state;
        console.log('id: ' + client.id + 'bodyRelay: ' + JSON.stringify(bodyRelay));
        // io.sockets.emit('setRelay', bodyRelay);
    });

    client.on('disconnect', function() {
        console.log('a user has disconnected');
    });
});

关于您的代码的其他一些注释。

你有这个的位置:

io.sockets.emit('setRelay', bodyRelay);

没有任何意义,因为您在初始化永远不会有任何连接的 socket.io 客户端的模块时调用它,因此它不会做任何有用的事情。

而且,您使用bodyRelay变量的方式似乎是一个可能的设计错误。您已将其设为模块级变量,这意味着它在所有连接的所有请求处理程序之间共享。除非这是为了让所有客户端都可以更改并且所有客户端都访问完全相同的数据集,否则它可能需要不同的设计。我不知道你真的想用它做什么来知道要建议什么设计。

于 2021-05-19T05:12:01.953 回答