Целью этого упражнения является создание HTTP-сервера, который обслуживает один и тот же текстовый файл для каждого полученного им запроса. Вот мой код. Это не работает.HTTP-серверы файлов и метод .writeHead
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);
Я проверил правильный ответ, и это поместить следующий код в первой строке функции, и удалить мой response.write() метод:
response.writeHead(200, { 'content-type': 'text/plain' });
вместо моего кода , который я думал бы написать данные по трубам из потока запроса в поток ответа (строка 10):
response.write(streamPipe)
Я не понимаю. Должен ли response.writeHead идти после того, как поток установлен с использованием метода .createReadStream, а не раньше?
Не отправляю ли уже существующие данные с ответом.write()? Я хочу, чтобы это возвращало строку, а не объект, но сначала параметр должен быть строкой, иначе это не сработает. Метод toString() возвращает [object Object].
Может кто-нибудь объяснить параметры метода writeHead и почему это происходит раньше всего?
Я понимаю, что это загруженный вопрос. Я новичок в узле, очень рад узнать, но мне просто трудно понять это. У меня довольно простой опыт работы с JavaScript и некоторые Java, поэтому я ценю любую помощь для начинающего разработчика node.js.
Очень полезно. Я проверил документацию. Последующие действия q - можете ли вы объяснить в терминах непрофессионала, что именно происходит с stream.pipe (response)? Он отправляет данные из источника в ответ, не так ли? В том числе метод response.writeHead() устранил мою проблему и отправил строку содержимого, но это происходит до того, как этот «труба» даже установлен. Это очень смущает меня. – Streamer
@ Азураски Вы можете обрабатывать 'response' как поток. Итак, первое, что вы отправляете в этот поток, - это состояние и заголовки (т. Е. Вы вызываете '.writeHead()'). Но поток все еще открыт. Итак, теперь вы вызываете 'stream.pipe (response)', который отправляет все из прочитанного потока 'stream' в перезаписываемый поток' response'. Таким образом, вы заполняете содержание ответа. Вот почему '.writeHead' должно произойти до' .pipe'. Обратите внимание, что (по умолчанию) '.pipe' автоматически закрывает поток' response' после этого. Надеюсь, теперь это ясно. Не стесняйтесь задавать больше вопросов. :) – freakish