我有下一段代码
function Server() {
function eventHandler(data) {
console.log('DATA ' + this.server.socket.remoteAddress + ': ' + data);
socket.write('You said "' + data + '"');
}
function connectionHandler(socket) {
console.log('server connected');
console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);
socket.on('data', eventHandler);
}
this.server = net.createServer(connectionHandler);
this.port = undefined;
this.startServer = function(port) { //Maybe change backlog for security reasons
this.port = port;
this.server.listen(port, function() { //'listening' listener add handle object here
console.log('server bound');});
}
}
每次建立连接时我都会得到
server bound
server connected
CONNECTED: 132.65.16.64:55028
/a/fr-05/vol/netforce/stud/yotamoo/ex4/myHTTP.js:7
console.log('DATA ' + this.server.socket.remoteAddress + ': ' + data);
^
TypeError: Cannot read property 'remoteAddress' of undefined
at Socket.eventHandler (/a/fr-05/vol/netforce/stud/yotamoo/ex4/myHTTP.js:7:43)
at Socket.emit (events.js:67:17)
at TCP.onread (net.js:329:14)
这当然与evenHandler()
有关。我不明白 Node JS 中如何创建对象及其范围。例如,socket
和 data
在哪里创建的?他们的范围是什么?
非常感谢
最佳答案
这表示当前调用的函数。
在您的情况下,这指的是 eventHandler 并且 eventHandler 仅将数据作为可访问值。
如果您尝试访问套接字,您将得到像您一样的异常。因为套接字不在该函数范围内。
套接字和数据都来自异步回调,这是 Node.js 的主要模式。
关于node.js - Node JS 变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13746989/