从4.4.0更新到6.9.2后,我的node.js文件在客户端断开连接时崩溃,例如:
this.ee._events.hasOwnProperty undefined at ultron\index.js:80 at process._tickCallback (internal/process/next_tick.js:98:9)
如果我回滚到4.4.0,它会再次正常工作。我是从Windows操作系统上的nodemon服务器运行的。
var server = require('http').createServer();
var io = require('socket.io')(server);
var http = require('http');
var querystring = require('qs');
io.on('connection', function(client){
var host = client.request.headers.host.split(':');
client.host = host[0];
console.log('new connection');
client.on('call', function(socketData){
if(socketData == "undefined" || !socketData.controller) {
return;
}
var path = stripHostFromPath(client.host, socketData.controller);
requestData(client.host, path, client.request.headers.cookie, 'GET',
function (body) {
var controllerSlices = socketData.controller.split('/');
var controller = controllerSlices[controllerSlices.length -1].replace('?', "");
var controllerObj = querystring.parse(controller);
var data = IsJsonString(body);//return json if true
if (controllerObj && controllerObj.f == 'updateUser') {
if (data != false) {
client.user_id = data.userId;
io.sockets.sockets['user_id'] = client.user_id;
}
}
if (data != false) {
if (data.broadcast) {
for (var i=0;i<data.broadcast.length;i++) {
//check if the user is connected
for (var k=0;k<io.sockets.sockets.length;k++) {
if (io.sockets.sockets[k]['user_id'] == data.broadcast[i]) {
io.sockets.sockets[k].emit(data.broadcastEvent, data.broadcastData);
}
}
}
}
}
});
});
client.on('disconnect', function(){
console.log('client disconected');
});
});
console.log('server listed on port 3000');
server.listen(3000);
function requestData(host, path, cookie, method, callbacks, postData) {
if (!method) method = 'POST';
if (!cookie) cookie = '';
var options = {
host: host,
port: '80',
path: path,
method: method,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Cookie': cookie
}
};
if (postData) {
postData = querystring.stringify( JSON.parse(postData) );
options.headers['Content-Length'] = Buffer.byteLength(postData);
}
try {
var req = http.request(options, function (res) {
// response is here
//console.log(res.statusCode);
//check if request was ok.
var body = '';
res.setEncoding('utf8');
res.on('data', function (chunk) {
body += chunk;
});
res.on('end', function () {
callbacks(body);
});
res.on('error', function(e){
console.log(e);
});
});
if (postData) {
req.write(postData);
}
req.end();
}
catch(e) {
console.log('requestData error:');
console.log(e);
}
}
答案 0 :(得分:1)
听起来你安装了socket.io
的旧版本。升级到最新版本时,应更新engine.io
,ws
将更新ultron
,将let x = {a: y => y * 2}
let z = Object.assign({}, x)
console.log(z.a(5)); // 10
依赖关系更新为1.0.2,其中the issue已修复。