我有此代码使用API从第三方网站下载新闻Feed。它的设置每5秒运行一次,并提取可能发生的任何新闻事务。问题似乎是在没有新的交易发生时。
通过添加process.on('uncaught exception',function(error){console.log(“hmph”)})cron作业能够在5秒后继续,所以我很想离开它;但是,我添加了console.log(“hmph”),现在我很困惑。
第一次,控制台会写hmph。 5秒后它会写 哼 哼
等等。我知道我必须遗漏一些东西,但我不太确定它是什么。我已经尝试在else语句中执行request.end()但错误仍然会触发。
如果没有process.on('uncaught ...'),抛出的错误是:
events.js:71 抛出论点[1]; //未处理的'错误'事件 ^ 错误:解析错误 在Socket.socketOnData(http.js:1367:20) 在TCP.onread(net.js:403:27)
使用proccess.on('uncaught ...')console.log(错误)是:
{[错误:解析错误] bytesParsed:161,代码:'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);
答案 0 :(得分:3)
每次发出请求时,都会绑定一个新的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");
});