如何在http.get响应中处理未捕获的异常
我有这个代码使用API从第三方网站下载新闻提要。 其设置为每5秒运行一次,并引发可能发生的任何新闻交易。 问题似乎是在没有发生新交易的情况下。
通过添加process.on('未捕获的异常',function(error){console.log(“hmph”)})cron作业可以在5秒钟后继续,因此我试图保持原样; 但是,我添加了console.log(“hmph”),现在我很困惑。
第一次,控制台会写hmph。 5秒钟后它将写入hmph hmph
等等。 我知道我必须错过一些东西,但我不太确定它是什么。 我试着在else语句中执行request.end(),但错误仍然激发。
如果没有process.on('uncaught ...'),则抛出的错误是:
events.js:71个参数[1]; //未处理的'错误'事件^错误:解析TCP.onread(net.js:403:27)处的Socket.socketOnData(http.js:1367:20)错误
与proccess.on('uncaught ...')console.log(错误)是:
{[Error:Parse Error] bytesParsed:161,code:'HPE_INVALID_CONSTANT'}
我该如何正确处理这个错误?
缩写代码:
var job = new cronJob('*/5 * * * * *', function(){
var request = http.get({
host: 'www.example.com',
path: '/news_feed?apicode=myapicode',
port: 80,
headers: { 'accept-encoding': 'gzip' }
})
request.on('response', function(response){
if (response.statusCode == 200){
// gunzip response, save response to mongodb
}
else
{
// here is where the error is occuring
process.on('uncaughtException',function(error){
console.log(error);
console.log("hmph");
}
});
}, null, true);
每次发出请求时,都会绑定一个新的uncaughtException
处理程序,因此发送第一个请求时,会绑定第一个请求,当它发生失败时会打印一个错误,然后在下一个请求中添加另一个处理程序,当第一个和第二个处理程序都失败时,它将运行。
检查错误,并在这里讨论这种类型的错误:https://github.com/joyent/node/issues/3354看起来你正在连接的服务器可能会做一些奇怪的事情。 对你来说最简单的解决方案可能就是现在使用uncaughtException处理程序。 也就是说,这不是理想的,你不应该把它作为解决这样的未来问题的一般解决方案。
var job = new cronJob('*/5 * * * * *', function(){
var request = http.get({
host: 'www.example.com',
path: '/news_feed?apicode=myapicode',
port: 80,
headers: { 'accept-encoding': 'gzip' }
});
request.on('response', function(response){
if (response.statusCode == 200){
// gunzip response, save response to mongodb
}
});
}, null, true);
process.on('uncaughtException',function(error){
console.log(error);
console.log("hmph");
});
链接地址: http://www.djcxy.com/p/46455.html