1

我需要在 node.js 中实现一个 HTTP 服务器而不使用 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");
});

我错过了什么?

我当然也在使用 net 模块来获取套接字和 fs。

4

1 回答 1

1

您拥有的代码有两个主要问题。

  • 响应格式为标头,后跟两组“\r\n”,然后是内容。您的 end() 调用中的 "\r\n" 应该在str. 您还缺少第一个“\r\n”中的“n”。
  • 您正在尝试通过管道传输 readstream 的内容,这很好,但是您在 steam 的 end() 中执行所有这些操作,因此管道没有任何东西可以发送,因为数据已经全部发出。

试试这样的东西。创建读取流,发送响应和管道然后休息。

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);
于 2011-12-10T15:50:30.390 回答