【问题标题】:Cannot read property 'emit' of undefined (duplicate)无法读取未定义的属性“发出”(重复)
【发布时间】:2016-09-07 19:27:20
【问题描述】:

在我当前的项目中,我正在通过 Node.js 从 TemperatureSensor 读取数据,并通过 web-socket 在浏览器上推送数据。 Node.js 代码如下所示:

var http = require('http');
var fs = require('fs');
var port = 8686;
var path = require('path');
var mqtt = require('mqtt');
var sock;
var tempValue,humidityValue,sensorMeasurement;
var client = mqtt.connect('mqtt://test.mosquitto.org');
client.subscribe('sensorMeasurement');

client.on('message', function(topic, payload) {
if (topic.toString() == "sensorMeasurement") {  
sensorMeasurement = JSON.parse(payload);
tempValue=sensorMeasurement.tempValue;
console.log("temperature value : " + tempValue);
sock.emit('sensorData', { value : tempValue });
  }
});


function handleRequest(request, response){
var filePath = path.join(__dirname, 'index.html' );
var stat = fs.statSync(filePath);
response.writeHead(200, {
    'Content-Type': 'text/html',
    'Content-Length': stat.size
});
var readStream = fs.createReadStream(filePath);
readStream.pipe(response);      
}

var server = http.createServer(handleRequest);
var io = require('socket.io').listen(server);
server.listen(port, "0.0.0.0", function(){
console.log("Server listening on: http://localhost:%s", port);
});

io.sockets.on('connection', function (socket) {
sock = socket; 
});

当我运行上面的代码时显示以下错误:

C:\ABB Work\nodeworkspace\Smart Home App\DataVisualizer.js:18
 sock.emit('sensorData', { value : tempValue });
 TypeError: Cannot read property 'emit' of undefined
 at MqttClient.<anonymous> (C:\ABB Work\nodeworkspace\Smart Home App\DataVisualizer.js:18:7)
at emitThree (events.js:97:13)
at MqttClient.emit (events.js:175:7)
at MqttClient._handlePublish (C:\ABB Work\nodeworkspace\Smart Home App\node_modules\mqtt\lib\client.js:792:12)
at MqttClient._handlePacket (C:\ABB Work\nodeworkspace\Smart Home App\node_modules\mqtt\lib\client.js:282:12)
at process (C:\ABB Work\nodeworkspace\Smart Home App\node_modules\mqtt\lib\client.js:238:12)
at Writable.writable._write (C:\ABB Work\nodeworkspace\Smart Home App\node_modules\mqtt\lib\client.js:248:5)
at doWrite (C:\ABB Work\nodeworkspace\Smart Home App\node_modules\mqtt\node_modules\readable-stream\lib\_stream_writable.js:237:10)
at writeOrBuffer (C:\ABB Work\nodeworkspace\Smart Home App\node_modules\mqtt\node_modules\readable-stream\lib\_stream_writable.js:227:5)
at Writable.write (C:\ABB Work\nodeworkspace\Smart Home App\node_modules\mqtt\node_modules\readable-stream\lib\_stream_writable.js:194:11)

sock 已经定义为变量。我错过了什么吗?

【问题讨论】:

  • sock 已定义但未初始化。
  • @Eftakhar 我应该用 null 初始化吗?或者 {} ?你能指导我如何初始化 sock 吗?
  • 应该初始化 which eventEmitter 类似于 var EventEmitter = require('events'); var sock = new EventEmitter();
  • @Eftakhar 您能否将上述评论添加为 ans ?它与我的设置一起使用。感谢您的帮助。

标签: node.js websocket


【解决方案1】:

应该用事件发射器初始化

var EventEmitter = require('events');
var sock = new EventEmitter();

【讨论】:

    猜你喜欢
    • 2017-06-20
    • 2017-06-05
    • 2019-03-10
    • 2017-12-02
    • 2016-09-14
    • 2021-03-18
    • 2018-11-18
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多