Das Ziel dieser Übung besteht darin, einen HTTP-Server zu erstellen, der für jede empfangene Anforderung dieselbe Textdatei bereitstellt. Hier ist mein Code. Es funktioniert nicht.HTTP-Dateiserver und die .writeHead-Methode
var http = require ('http');
var fs = require ('fs');
var port = process.argv[2];
var file = process.argv[3];
var bl = require ('bl');
var server = http.createServer(function (request, response) {
var stream = fs.createReadStream(file);
var streamPipe = stream.pipe(response);
response.write(streamPipe);
});
server.listen(port);
überprüfte ich die richtige Antwort, und das ist den folgenden Code in der ersten Zeile der Funktion zu setzen und meine response.write remove() Methode:
response.writeHead(200, { 'content-type': 'text/plain' });
statt meinem Code , was ich dachte, die Daten aus dem Anforderungsstrom an den Antwortstrom (Leitung 10) geleitet schreiben würde:
response.write(streamPipe)
ich verstehe nicht. Sollte nicht response.writeHead gehen, nachdem der Stream mit der. CreateReadStream-Methode eingerichtet wurde, und nicht vorher?
Sendet ich nicht bereits vorhandene Daten mit response.write()? Ich möchte, dass dies eine Zeichenfolge und kein Objekt zurückgibt, aber der Parameter muss zuerst eine Zeichenfolge sein, sonst funktioniert es nicht. Die toString() -Methode gibt [object Object] zurück.
Kann jemand bitte die Parameter der writeHead Methode erklären, und warum es vor allem anderen geht?
Ich weiß, das ist eine geladene Frage. Ich bin neu in Knoten, wirklich aufgeregt zu lernen, aber ich finde es nur so schwer zu verstehen. Ich habe ziemlich grundlegende JavaScript-Erfahrung und etwas Java, also schätze ich jede und alle Hilfe für einen aufstrebenden node.js Entwickler.
Sehr hilfreich. Ich habe die Dokumentation überprüft. Follow-up q - Können Sie in Laien erklären, was genau passiert mit Stream.pipe (Antwort)? Es sendet die Daten von der Quelle zur Antwort, richtig? Das Einschließen der response.writeHead() - Methode hat mein Problem gelöst und die Inhaltskette gesendet, aber das passiert, bevor diese "Pipe" überhaupt eingerichtet wird. Es ist sehr verwirrend für mich. – Streamer
@Azurasky Sie können "Antwort" als Stream behandeln. Als erstes sendest du an diesen Stream Status und Header (d. H. Du nennst '.writeHead()'). Aber der Strom ist noch offen. So rufen Sie nun 'stream.pipe (response)' auf, das alles von einem lesbaren Stream-Stream an einen beschreibbaren Stream-Response sendet. Auf diese Weise füllen Sie den Inhalt der Antwort. Deshalb muss ".writeHead" vor ".pipe" stehen. Beachten Sie, dass '.pipe' den 'response' Stream danach automatisch schließt. Ich hoffe es ist jetzt klar. Fühlen Sie sich frei, mehr Fragen zu stellen. :) – freakish