Ich versuche einfach, einen Knotenserver zu erstellen, der den HTTP-Status einer bestimmten URL ausgibt.
Wenn ich versuche, die Antwort mit res.write zu leeren, wird folgende Fehlermeldung angezeigt: throw new TypeError ('erstes Argument muss eine Zeichenfolge oder ein Puffer sein');
Aber wenn ich sie durch console.log ersetze, ist alles in Ordnung (aber ich muss sie in den Browser schreiben, nicht in die Konsole).
Der Code ist
var server = http.createServer(function (req, res) {
res.writeHead(200, {"Content-Type": "text/plain"});
request({
uri: 'http://www.google.com',
method: 'GET',
maxRedirects:3
}, function(error, response, body) {
if (!error) {
res.write(response.statusCode);
} else {
//response.end(error);
res.write(error);
}
});
res.end();
});
server.listen(9999);
Ich glaube, ich sollte irgendwo einen Rückruf hinzufügen, aber ziemlich verwirrt, und jede Hilfe wird geschätzt.
response.statusCode
ist eine Zahl, zBresponse.statusCode === 200
nicht'200'
. Erwartet, wie in der Fehlermeldung angegeben,write
einstring
oderBuffer
Objekt, müssen Sie es konvertieren.Sie haben jedoch auch Recht mit Ihrem Rückrufkommentar.
res.end();
sollte sich innerhalb des Rückrufs befinden, direkt unter Ihrenwrite
Anrufen.quelle
Ich erhalte diese Fehlermeldung und sie erwähnt options.body
Ich hatte das ursprünglich
Ich habe es so geändert:
und es scheint jetzt ohne die Fehlermeldung zu funktionieren ... scheint aber ein Fehler zu sein.
Ich denke, dies ist der offiziellere Weg, dies zu tun:
quelle
javascript request.post({ url: apiServerBaseUrl + '/v1/verify', json: { email: req.user.email } }
Nun, offensichtlich versuchen Sie, etwas zu senden, das kein String oder Puffer ist. :) Es funktioniert mit der Konsole, weil die Konsole alles akzeptiert. Einfaches Beispiel:
Eine Möglichkeit, etwas in einen String umzuwandeln, besteht darin, Folgendes zu tun:
wann immer Sie versuchen, etwas zu senden. Die andere Möglichkeit besteht darin, die
.toString()
Methode aufzurufen :Beachten Sie, dass es möglicherweise immer noch nicht das ist, wonach Sie suchen. Sie sollten Strings / Puffer immer
.write
ohne solche Tricks übergeben.Als Randnotiz: Ich gehe davon aus, dass dies
request
eine asynchrone Operation ist. Wenn dies der Fall ist,res.end();
wird vor jedem Schreiben aufgerufen, dh das Schreiben schlägt trotzdem fehl (da die Verbindung zu diesem Zeitpunkt geschlossen wird). Verschieben Sie diese Zeile in den Handler:quelle
Wenn Sie ein JSON-Objekt in die Antwort schreiben möchten, ändern Sie den Header-Inhaltstyp in application / json
quelle
Und es gibt eine andere Möglichkeit (in diesem Fall nicht), wenn Sie mit Ajax (XMLhttpRequest) arbeiten. Wenn Sie Informationen an das Client-Ende zurücksenden, sollten Sie res.send (Antworttext) anstelle von res.end (Antworttext) verwenden.
quelle
Der Fehler besagt, dass der für die betreffende Unterbrechungsfunktion erforderliche Parameter nicht das erforderliche Format hat, dh Zeichenfolge oder Puffer
Die Lösung besteht darin, den Parameter in string zu ändern
oder Puffer
quelle
Das erste Argument muss vom Typ string oder Buffer sein. Empfangenes Typobjekt
Ich habe den obigen Fehler erhalten, als ich Körperdaten an das Anforderungsmodul übergeben habe.
Ich habe einen anderen Parameter übergeben, der JSON ist: true und seine Funktionsweise.
quelle