Ich lese die Dokumente unter http://nodejs.org/docs/v0.4.0/api/http.html#http.request , aber aus irgendeinem Grund kann ich das Attribut body / data scheinbar nicht finden auf dem zurückgegebenen, fertigen Antwortobjekt.
> var res = http.get({host:'www.somesite.com', path:'/'})
> res.finished
true
> res._hasBody
true
Es ist fertig (http.get erledigt das für Sie), also sollte es irgendeine Art von Inhalt haben. Aber es gibt keinen Körper, keine Daten und ich kann nicht daraus lesen. Wo versteckt sich der Körper?
data
Ereignisse abgeschlossen sind, sollten Sieres
auf"end"
( nodejs.org/docs/latest/api/http.html#event_end_ ) hörenAntworten:
http.request docs enthält ein Beispiel für den Empfang des Antwortkörpers durch die Behandlung von
data
Ereignissen:http.get macht dasselbe wie http.request, ruft jedoch
req.end()
automatisch auf.quelle
res.setEncoding('utf8');
das http.get-Beispiel ergänzen. Ansonsten habe ich kein HTML in derchunk
Variablen bekommen.POST requests typically use a response body, not GET.
Post- Anfrage hat einen Body und GET- Anfrage nicht, aber eine GET- Antwort kann einen Body haben.Ich möchte auch hinzufügen, dass der
http.ClientResponse
zurückgegebene vonhttp.get()
einend
Ereignis hat. Hier ist eine andere Möglichkeit, wie ich die Körperantwort erhalte:quelle
http.ClientResponse
wird nicht vonhttp.get()
http.ClientRequest
is zurückgegeben, gemäß der aktuellen Dokumentation und der Dokumentation, auf die das Originalplakat verweist.Bearbeiten: 6 Jahre später auf sich selbst antworten
Das Warten Schlüsselwort ist der beste Weg, um eine Antwort von einer HTTP-Anfrage zu erhalten und Rückrufe zu vermeiden
.then()
Sie müssen auch einen HTTP-Client verwenden, der Versprechen zurückgibt.
http.get()
Gibt immer noch ein Request-Objekt zurück, sodass dies nicht funktioniert. Sie könnten verwendenfetch
, sondernsuperagent
ist ein ausgereiftes HTTP - Client, der mehr sinnvolle Voreinstellungen einschließlich einfacher Query - String - Codierung bietet, richtig Mime - Typen, JSON standardmäßig verwendet wird , und anderen gängigen HTTP - Client - Funktionen.await
wartet, bis das Versprechen einen Wert hat - in diesem Fall eine HTTP-Antwort!Mit await geht die Steuerung einfach in die nächste Zeile über, sobald das von zurückgegebene Versprechen
superagent.get()
einen Wert hat.quelle
res
auf den Rückgabewert von gesetztsuperagent.get()
, nichthttp.get()
.http.get()
Gibt eine zurückhttp.IncomingMessage
, die keinetext
Eigenschaft hat. Es ist nicht das Antwortobjekt, es ist das Anforderungsobjekt.Das
data
Ereignis wird mehrmals mit "Chunks" des Körpers beim Herunterladen und einemend
Ereignis ausgelöst, wenn alle Chunks heruntergeladen wurden.Da Node jetzt Promises unterstützt , habe ich einen einfachen Wrapper erstellt, um die verketteten Blöcke über ein Promise zurückzugeben:
Sie können es von einer asynchronen Funktion aus aufrufen mit:
quelle
Wenn Sie .get verwenden möchten, können Sie dies folgendermaßen tun
quelle
chunk.toString()
, optional übergebentoString
und codieren. Das heißt,setEncoding
ist wahrscheinlich effizienter.Sie müssen der Anforderung einen Listener hinzufügen, da node.js wie folgt asynchron arbeitet:
quelle
Nadelmodul ist auch gut, hier ist ein Beispiel, das
needle
Modul verwendetquelle
Eine Portion Kaffee hier:
Und zusammengestellt
quelle
Sie können den Hauptteil der Antwort nicht aus dem Rückgabewert von abrufen
http.get()
.http.get()
gibt kein Antwortobjekt zurück. Es gibt das Anforderungsobjekt (http.clientRequest
) zurück. Es gibt also keine Möglichkeit, den Hauptteil der Antwort aus dem Rückgabewert von zu ermittelnhttp.get()
.Ich weiß, dass es eine alte Frage ist, aber das Lesen der Dokumentation, mit der Sie verlinkt haben, zeigt, dass dies auch dann der Fall war, als Sie es veröffentlicht haben.
quelle