Javascript 是否可以捕获尝试连接到错误url时生成的异常?
使用节点http包,似乎无法捕获打开错误URL引起的异常。这是一个问题,因为它杀死了我的集群,我想保证它将永远存在 代码如下:(使用光纤。承诺) 下面是我如何测试它的Javascript 是否可以捕获尝试连接到错误url时生成的异常?,javascript,node.js,try-catch,Javascript,Node.js,Try Catch,使用节点http包,似乎无法捕获打开错误URL引起的异常。这是一个问题,因为它杀死了我的集群,我想保证它将永远存在 代码如下:(使用光纤。承诺) 下面是我如何测试它的 var promise = require('fibers-promise'); var gu = require("../src/utils/generalutilities.js"); var brokenSite = 'http://foo.bar.com:94//foo.js'; promise.start(functi
var promise = require('fibers-promise');
var gu = require("../src/utils/generalutilities.js");
var brokenSite = 'http://foo.bar.com:94//foo.js';
promise.start(function () {
try {
gu.openConnection(brokenSite, null, null, "GET", true);
}
catch (err) {
console.log('got: ' + err);
}
});
当我运行此代码时,我得到:
错误:getaddrinfo eNot。在try-catch中从未捕获到该错误。您可以在页面上搜索错误代码。在为请求提供错误处理程序时,它对我有效:
req.on('error', errorHandler);
我知道你也这么做了,但是你在发出
req.end();
在附加错误处理程序后,是否可以尝试发出end()
作为一个补充说明,我真的建议,因为它用合理的默认值处理这样的问题。工作起来真轻松
Edit:下面是一个简单的示例,显示附加错误处理程序可以让我处理enoint
/ENOTFOUND
错误:
var http = require('http');
var req = http.request({hostname: 'foo.example.com'}, function(err, res) {
if(err) return console.error(err);
console.log('got response!');
});
req.on('error', function(err) {
console.error('error!', err);
});
另一条有价值的信息:我不确定它如何适合光纤,但一般来说,您不应该在nodejs异步代码中抛出
。它很少按你想要的方式工作。相反,使用将任何错误作为第一个参数传递给下一个回调的标准做法,并在有意义的地方处理错误(通常,在调用链的高层,您可以对其进行合理的处理)。它甚至从未到达页面。它用getaddrinfo eNote向我射击请在将来使用正确的代码格式。您只需将整个代码块缩进四个空格。不要使用
。那么,错误上的堆栈跟踪是什么呢?移动我的end语句不起作用,但我使用request使它起作用-我同意此库为基本http包添加了很多内容!
var http = require('http');
var req = http.request({hostname: 'foo.example.com'}, function(err, res) {
if(err) return console.error(err);
console.log('got response!');
});
req.on('error', function(err) {
console.error('error!', err);
});