0

我有一个节点服务器,它从 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");
                    }
            });
    });

};

4

2 回答 2

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));
});
于 2013-11-02T19:49:28.627 回答
0

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

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

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

try {
    callback(JSON.parse(data));
} catch(e) {
    callback();
    console.log("authentication failed");
}
于 2013-11-02T19:57:47.130 回答