Javascript 如何处理http.get响应中的未捕获异常
我有这段代码,可以使用API从第三方网站上下载新闻提要。它的设置为每5秒运行一次,并提取可能发生的任何新闻事务。问题似乎是当没有新的事务发生时 通过添加process.on('uncaughtexception',function(error){console.log(“hmph”)}),cron作业可以在5秒后继续,所以我想让它保持原样;然而,我将console.log(“hmph”)添加到了中,现在我感到困惑 第一次,控制台将写入hmph。5秒后,它将写入 陶瓷厚膜压力变送器 嗯哼 等等。我知道我一定错过了什么,但我不太确定是什么。我已尝试在else语句中执行request.end(),但仍会引发错误 没有进程。在('uncaught…')上引发的错误是: events.js:71 抛出参数[1];//未处理的“错误”事件 ^ 错误:解析错误 在Socket.socketOnData(http.js:1367:20) 在TCP.onread(net.js:403:27) 对于进程on('uncaught…'),console.log(错误)是: {[Error:Parse Error]bytesParsed:161,代码:'HPE_INVALID_CONSTANT'} 如何正确处理此错误 缩写代码:Javascript 如何处理http.get响应中的未捕获异常,javascript,node.js,http-get,uncaught-exception,eventemitter,Javascript,Node.js,Http Get,Uncaught Exception,Eventemitter,我有这段代码,可以使用API从第三方网站上下载新闻提要。它的设置为每5秒运行一次,并提取可能发生的任何新闻事务。问题似乎是当没有新的事务发生时 通过添加process.on('uncaughtexception',function(error){console.log(“hmph”)}),cron作业可以在5秒后继续,所以我想让它保持原样;然而,我将console.log(“hmph”)添加到了中,现在我感到困惑 第一次,控制台将写入hmph。5秒后,它将写入 陶瓷厚膜压力变送器 嗯哼 等等。我
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
处理程序,因此当发送第一个请求时,您会绑定第一个,当第一个请求失败时,它会打印一个错误,然后在下一个请求时,您会添加另一个处理程序,当该处理程序失败时,第一个和第二个处理程序都会运行
检查错误,并在这里讨论这种类型的错误:您连接的服务器可能正在做一些奇怪的事情。目前最简单的解决方案可能是使用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");
});
我感谢你的回答;然而,我已经尝试过这样做了,我得到了:events.js:71 throw arguments[1];//未处理的“error”事件^error:Socket.socketOnData(http.js:1367:20)和TCP.onread(net.js:403:27)的解析错误,您确定要在我说的相同位置绑定吗?你没有把错误放在响应回调中,就像你有未捕获的异常句柄一样是的,我检查过了,它在同一个位置。这是你建议的完整代码。哎呀,在那段代码中,第28行.on('error')是我一直在玩的东西,试图在dif点测试它。不管怎样,同样的错误仍然会发生。我真的很感谢你的帮助:)谢谢你的帮助。有没有办法清除旧的错误处理程序,这样它们就不会累积?我担心最终会有大量的处理者,这可能会产生什么影响?