我正在编写一个节点 js 应用程序。我正在使用 request 和cheerio 来加载一组 URL 并获取该站点的大量信息,现在假设我想要获取的只是标题:
var urls = {"url_1", "url_2", "url_3",...,"url_n"};
for(var i=0; i<urls.length; i++)
{
getDOMTitle(urls[i],function(error,title){
if(error)
console.log("Error while getting title for " + urls[i]);
else
console.log("The title for " + urls[i] + " is " + title);
});
}
这就是我的 getDOMTitle 方法的外观:
function getDOMTitle(urlReq,callback)
{
var request = require('request');
var cheerio = require('cheerio');
request({url:urlReq},function(error, response, doc){
var $ = cheerio.load(doc);
if(error)
{
callback(true,null);
}
else
{
$('title', 'head').each(function (i, elem) {
var title = $(this).text();
callback(false,title);
});
}
}
}
如果模块抛出未捕获的异常,我该如何处理这种情况?我尝试添加以下内容:
process.on('uncaughtException', function (err) {
console.error(err);
console.log("Node NOT Exiting...");
callback(true,null);
});
当我这样做时,我收到一条错误消息,指出一旦发送了标头,我就无法设置它们。如果我从进程错误处理中删除回调,我看不到该错误,但客户端旋转了很长时间,因为我假设我们从未调用回调。
我该如何解决这个问题?
另外,我在某处读到您可以在应用程序级别捕获未捕获的异常,因此您不必复制代码以在每个方法中捕获它,这可能吗?如果是,并且引发异常的方法预计会回调一些信息,那如何实现?
谢谢,