节点js无限循环

时间:2013-11-02 05:41:42

标签: javascript node.js loops infinite

我有一个节点服务器从php服务器提取信息并通过回调将其发送到需要的位置。一天或两天,服务器陷入无限循环,我认为这是因为我没有正确处理php和节点服务器之间的连接。我在下面发布了我的验证码。有人有什么想法吗?

exports.authenticate = function(request, callback) {
   var https = require('https');

   var options = {
            hostname: 'www.mysite.com',
            port: 443,
            path: '/site/chatauth?id=' + request.sessionID,
            method: 'GET',
    };
    var req = https.request(options, function(res) {
        //console.log("statusCode: ", res.statusCode);
        // console.log("headers: ", res.headers);

         res.on('data', function(d) {
         // process.stdout.write(d);
         });
        });

    req.end();
    req.on('response', function (response) {
            var data = '';
            response.setEncoding('utf8');
            response.on('data', function(chunk) {
                    data += chunk;
            });

           // console.log (request.sessionID);

            response.on('end', function() {
                    try {
                            callback(JSON.parse(data));
                    } catch(e) {
            callback(); 
                            console.log("authentication failed");
                    }
            });
    });

};

2 个答案:

答案 0 :(得分:0)

我在代码中找不到任何错误,但由于发射器/异步方式,我可能没有完全理解它。

我个人使用 npm模块请求(简化的HTTP请求客户端)到目前为止没有任何问题。 你可以轻松尝试一下:

var request = require('request');
request({
    uri: 'https://www.mysite.com/site/chatauth?id=' + request.sessionID,
    encoding: 'utf8',
    timeout: 20000,
    strictSSL: true
}, function (err, response, body) {
   if (err || response.statusCode !== 200) {
       // some error handling
       callback('error');
       return;
   }
   callback(null, JSON.parse(body));
});

答案 1 :(得分:0)

你确定验证功能吗?你的代码似乎很完美。你必须做两件事

1.对请求错误,请求超时和请求中止进行回调。

2.深入了解您的回调,在下面的代码中,您可以在抛出异常时调用相同的函数。你确定吗?。如果它再次达到“认证”功能,这可能会使循环成为可能。

try {
    callback(JSON.parse(data));
} catch(e) {
    callback();
    console.log("authentication failed");
}
相关问题