2015-06-30 4 views
4

Я использую модули Request и стандартные Node.js HTTP, чтобы написать простой сервис для отдыха.Запрос всегда возвращает объект с нулевой ошибкой

Прямо сейчас, обработчик запросов на стороне сервера выглядит следующим образом:

response.writeHead("400","Nope"); 
response.end(); 

И на стороне клиента код выглядит следующим образом:

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

    console.log(arguments); 
} 

response.statusCode является 400, но error всегда null.

Что мне нужно сделать на стороне сервера, чтобы получить модуль запроса, чтобы узнать, что ответ является ошибкой?

+0

Связанный: [Node.js HTTP GET запрос событие ошибки не подбирая 404 или 403] (http://stackoverflow.com/questions/15915352/node-js-http -get-request-error-event-not-pick-up-404-or-403) –

ответ

5

Ошибка при получении ответа на запрос. Объект ошибки заполняется только в том случае, если сам запрос не является ошибкой, если ответ представляет ошибку. Из документации: Если во время запроса возникла какая-либо ошибка (будь то с разрешением DNS, ошибками уровня TCP или фактическими ошибками разбора HTTP), на возвращенный объект запроса испускается событие «ошибка».

Запрос -> успешный ответ (может представлять собой удаленную ошибку) -> ответ заселена

Запрос -> Ошибка возникает локально или с сообщением на пульте дистанционного управления (отсутствие ответа или нераспознанный ответ) -> Ошибка

+1

Не очень интуитивно, на мой взгляд ... – electrotype

+0

Это зависит от вашего POV, я полагаю, но это имеет смысл с более высокого уровня - > A вызывает B, который отвечает на A: нет ошибки; Вызовы B, которые не могут ответить на ошибку A:. То, что представляет ответ, не имеет значения, поскольку запрос/ответ удался. –

0

Мне не нравится это поведение по умолчанию. Я еще не уверен, но я могу даже создать некоторые полезные методы, обертывающие request, чтобы изменить его. Моя упаковка обратного вызова будет что-то вроде:

function(connError, httpResponse, body) { 
    let error = null; 
    if(connError) { 
     error = connError; 
    } else if(httpResponse.statusCode != 200) { 
     error = body; 
     body = null; 
    } 
    finalCallback(error, body); 
} 
Смежные вопросы