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://添加到Google域名,那么我会按预期获得状态代码200。就像我一样,我希望能够捕获错误,并出现类似于"连接ECONNREFUSED"的错误消息。打印到终端控制台。相反,它将堆栈跟踪打印到终端。
答案 0 :(得分:11)
如果查看source for https.get()
,您可以看到,如果网址解析失败(仅当您通过"google.com/"
时才会解析,因为这不是有效的网址),然后它同步抛出:
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()
来尝试/捕获这样的内容:
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);
}