如何发送一个http响应,而不使用node.js中的http模块?

我需要在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"); }); 

我错过了什么?

我当然使用净模块来获取套接字和FS。

你的代码有两个主要的问题。

  • 响应格式为标题,后跟两组“\ r \ n”,然后是内容。 你的end()调用中的“\ r \ n”应该在str 。 您还从第一个“\ r \ n”中错过了“n”。
  • 你正在试图读取readstream的内容,这很棒,但是你正在做所有的这些内部的end(),所以pipe道什么都不需要发送,因为数据已经被发送了。

尝试这样的事情,而不是。 创build读取stream,发送响应和pipe道然后rest。

 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);