更新后节点js无法正常工作

时间:2016-12-21 21:54:28

标签: javascript node.js

从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);
    }
}

1 个答案:

答案 0 :(得分:1)

听起来你安装了socket.io的旧版本。升级到最新版本时,应更新engine.iows将更新ultron,将let x = {a: y => y * 2} let z = Object.assign({}, x) console.log(z.a(5)); // 10依赖关系更新为1.0.2,其中the issue已修复。