Javascript 为什么这个基本的Node.js错误处理不起作用?
Node.js:Javascript 为什么这个基本的Node.js错误处理不起作用?,javascript,node.js,error-handling,Javascript,Node.js,Error Handling,Node.js: var https = require("https"); var request = https.get("google.com/", function(response) { console.log(response.statusCode); }); request.on("error", function(error) { console.log(error.message); }); 如果我将https://添加到谷歌域名中,那么我将获得
var https = require("https");
var request = https.get("google.com/", function(response) {
console.log(response.statusCode);
});
request.on("error", function(error) {
console.log(error.message);
});
如果我将https://添加到谷歌域名中,那么我将获得预期的状态代码200。按原样,我希望捕捉到错误,并向终端控制台打印类似于“connect ECONREFUSE”的错误消息。相反,它将stacktrace打印到终端。如果您查看,您可以看到,如果URL解析失败(仅当您将其传递给“google.com/”
时,它将失败,因为这不是一个有效的URL),那么它会同步抛出:
exports.get = function(options, cb) {
var req = exports.request(options, cb);
req.end();
return req;
};
exports.request = function(options, cb) {
if (typeof options === 'string') {
options = url.parse(options);
if (!options.hostname) {
throw new Error('Unable to determine the domain name');
}
} else {
options = util._extend({}, options);
}
options._defaultAgent = globalAgent;
return http.request(options, cb);
};
因此,如果您想捕获特定类型的错误,您需要对https.get()
调用try/catch,如下所示:
var https = require("https");
try {
var request = https.get("google.com/", function(response) {
console.log(response.statusCode);
}).on("error", function(error) {
console.log(error.message);
});
} catch(e) {
console.log(e);
}
请尝试打印just error,而不是error.Message。为什么要拒绝连接?请使用
https
协议,如https://google.com
而不是google.com
。