Как отправить ответ http без использования модуля http в node.js? - PullRequest
1 голос
/ 10 декабря 2011

Мне нужно реализовать HTTP-сервер в node.js без использования модуля http. Как весело! У меня проблемы с отправкой ответного сокета.

Я пытаюсь получить файл, и мой код выглядит следующим образом:

fileStream = fs.createReadStream('example.jpg');
fileStream.on("end", function (close) {    
    var str = "HTTP/1.1 200 OK\r\Content-Type: image/jpeg\r\n" //and some more headers.
    socket.write(str);
    socket.pipe(fileStream);
    socket.end("\r\n");
});

Чего мне не хватает?

Я, конечно, использую сетевой модуль для получения сокета и fs.

1 Ответ

1 голос
/ 10 декабря 2011

Есть две основные проблемы с кодом, который у вас есть.

  • Ответы в формате заголовков, за которыми следуют два набора «\ r \ n», а затем содержимое. "\ R \ n" в вашем вызове end () должен быть в str. Вы также пропускаете 'n' из первого "\ r \ n".
  • Вы пытаетесь передать содержимое потока чтения, и это здорово, но вы делаете все это внутри конца steam (), поэтому канал как ничто не может отправить, потому что все данные уже были отправлены.

Попробуйте что-нибудь подобное. Создайте поток чтения, отправьте ответ и канал, а затем отдохните.

var str = "HTTP/1.1 200 OK\r\nContent-Type: image/jpeg\r\n\r\n";
socket.write(str);
var fileStream = fs.createReadStream('example.jpg');
fileStream.pipe(socket);
...