为什么这个基本的Node.jserror 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://到谷歌域名,那么我得到了预期的状态代码200。 现在,我希望能够捕获错误,并将类似于“连接ECONNREFUSED”的错误消息打印到terminal控制台。 相反,它将堆栈跟踪打印到terminal。

如果您查看https.get()的源代码, https.get()可以看到,如果URLparsing失败(当您只将它传递给"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); }; 

所以,如果你想捕捉特定types的错误,你需要围绕你的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); }