为什么这个基本的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); }