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