我在node.js中使用HTTP客户端时尝试捕获ECONNREFUSED错误。我正在提出这样的要求:
var http = require('http');
var options = { host: 'localhost', port: '3301', path: '/', method: 'GET' };
http.request(options).on('response', function (res) {
// do some stuff
});
我无法弄清楚如何捕捉到这个错误:
Error: connect ECONNREFUSED
at errnoException (net.js:614:11)
at Object.afterConnect [as oncomplete] (net.js:605:18)
如果我request.on('error', function () {});
,它就无法捕捉到它。如果我这样做:
var req = request.on(etc)
req.on('error', function blah () {});
然后我得到TypeError: Object false has no method 'on'
。
我真的必须做一个顶级未捕获错误的事情来处理这个问题吗?无论我做什么,我的整个过程都会退出。
编辑:我发现了一些关于如何通过创建connection
对象,在其上调用request
,然后绑定到connection
对象上的错误的博客文章,但是没有这会使整个http.request()
快捷方式无用吗?
答案 0 :(得分:21)
您是否因为使用http://nodejs.org/docs/v0.6.5/api/http.html#http.request作为基础?试试这个:
var req = http.request(options, function(res) {
// Bind 'data', 'end' events here
});
req.on('error', function(error) {
// Error handling here
});
req.end();
答案 1 :(得分:4)
我已经为这个(以及许多其他)页面尝试了所有建议,我已经找到了解决方案。
我的客户需要检测运行嵌入式窗口的交钥匙产品。客户端从不同的机器提供给交钥匙。
交钥匙可以处于3种状态:
我的客户端向我的nodejs / express服务发送'查找交钥匙产品'GET消息,然后该服务尝试通过http.request查找交钥匙产品。 3个用例中每个用例的行为都是;
以下代码处理所有3种情况。捕获ECONNREFUSED事件的技巧是了解其处理程序绑定到套接字事件。
CL_INVALID_DEVICE
答案 2 :(得分:3)
对http.request()
的每次调用都会返回自己。
所以试试这样......
http.request(options.function(){}).on('error',function(){}).end();
答案 3 :(得分:0)
对于不使用 DNS 的用户(您也可以使用 request
代替 get
,只需将 get
替换为 request
,如下所示:http.request({ ... })
):< /p>
http.get({
host: '127.0.0.1',
port: 443,
path: '/books?author=spongebob',
auth: 'user:p@ssword#'
}, resp => {
let data;
resp.on('data', chunk => {
data += chunk;
});
resp.on('end', () => console.log(data));
}).on('error', err => console.log(err));