请求总是返回空错误对象

7
我将使用Request和标准的Node.js HTTP模块编写一个简单的REST服务。目前,服务器端请求处理程序如下:
response.writeHead("400","Nope");
response.end();

客户端代码如下:

request.get(href,handleResponse);
function handleResponse(error,response,body) {

   console.log(arguments);
}

response.statusCode 的值为 400,但 error 始终为 null

我需要在服务器端执行什么操作才能使 Request 模块识别出响应是一个错误?


2个回答

9

请求已成功接收响应,因此没有错误。错误对象仅在请求本身出错而不是响应表示错误时才有值。根据文档:如果在请求期间遇到任何错误(包括DNS解析、TCP级别错误或实际的HTTP解析错误),则会在返回的请求对象上发出“error”事件。

请求 --> 成功响应(可能代表远程错误)-->填充响应

请求 --> 本地或与远程通信发生错误(无响应或未识别的响应)--> 填充错误


我想这取决于你的观点,但从更高的层面来看是有道理的。A调用B,B响应A:没有错误;A调用B,但B未能响应A:错误。响应代表什么并不重要,因为请求/响应已成功。 - Jason Cust

1
我不喜欢这种默认行为。虽然我还不确定,但我可能会创建一些实用方法来包装request以更改它。我的包装回调可能是这样的:
function(connError, httpResponse, body) {
    let error = null;
    if(connError) {
        error = connError;
    } else if(httpResponse.statusCode != 200) {
        error = body;
        body = null;
    }
    finalCallback(error, body);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接