Я читаю документы по адресу http://nodejs.org/docs/v0.4.0/api/http.html#http.request , но по какой-то причине мне не удается найти атрибут body / data на возвращенном, законченном объекте ответа.
> var res = http.get({host:'www.somesite.com', path:'/'})
> res.finished
true
> res._hasBody
true
Он закончен (http.get сделает это за вас), поэтому он должен иметь какой-то контент. Но там нет тела, нет данных, и я не могу читать с него. Где прячется тело?
data
события будут выполнены ...res
прослушайте их"end"
( nodejs.org/docs/latest/api/http.html#event_end_ )Ответы:
http.request docs содержит пример того, как получить тело ответа через
data
событие обработки :http.get делает то же самое, что и http.request, за исключением того, что он вызывает
req.end()
автоматически.источник
res.setEncoding('utf8');
в пример http.get. В противном случае я не получил HTML вchunk
переменной.POST requests typically use a response body, not GET.
пост- запроса есть тело, а у запроса GET нет, но у ответа GET может быть тело.Я также хочу добавить, что
http.ClientResponse
возвращаемыйhttp.get()
объект имеетend
событие, поэтому вот еще один способ получения ответа тела:источник
http.ClientResponse
не возвращается вhttp.get()
http.ClientRequest
соответствии с текущей документацией и документацией, на которую ссылается оригинальный постер.Редактировать: отвечая на себя 6 лет спустя
Await ключевым словом является лучшим способом , чтобы получить ответ от запроса HTTP, избегая обратные вызовы и
.then()
Вам также потребуется использовать HTTP-клиент, который возвращает Promises.
http.get()
по-прежнему возвращает объект запроса, так что это не будет работать. Вы можете использоватьfetch
, ноsuperagent
это зрелый клиент HTTP, который имеет более разумные значения по умолчанию, включая более простое кодирование строки запроса, правильное использование типов MIME, JSON по умолчанию и другие общие функции клиента HTTP.await
будет ждать, пока Promise не получит значение - в этом случае ответ HTTP!Используя await, управление просто переходит на следующую строку, когда возвращаемое обещание
superagent.get()
имеет значение.источник
res
установлено возвращаемое значениеsuperagent.get()
, а неhttp.get()
.http.get()
возвращаетhttp.IncomingMessage
, у которого нетtext
свойства. Это не объект ответа, это объект запроса.data
Событие вызывается несколько раз с «кусками» тел , как они будут загружены иend
случае , когда все куски были загружены.Теперь, когда Node поддерживает Promises , я создал простую оболочку, которая возвращает объединенные фрагменты через Promise:
Вы можете вызвать его из асинхронной функции с помощью:
источник
Если вы хотите использовать .get, вы можете сделать это так
источник
chunk.toString()
, необязательно, передачуtoString
и кодирование. Это,setEncoding
вероятно, более эффективно.Вам нужно добавить прослушиватель к запросу, потому что node.js работает асинхронно так:
источник
Игла модуль тоже хорош, вот пример который использует
needle
модульисточник
Порция кофе здесь:
И скомпилировано
источник
Вы не можете получить тело ответа из возвращаемого значения
http.get()
.http.get()
не возвращает объект ответа. Возвращает объект запроса (http.clientRequest
). Таким образом, нет никакого способа получить тело ответа из возвращаемого значенияhttp.get()
.Я знаю, что это старый вопрос, но чтение документации, на которую вы ссылались, показывает, что это имело место даже тогда, когда вы ее опубликовали.
источник