2011-12-10 28 views
1

我需要在node.js中實現HTTP服務器而不使用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"); 
}); 

我缺少什麼?

我當然也使用net模塊來獲取socket和fs。

+0

只是有點好奇,你爲什麼試圖在NODE中實現一個HTTP服務器而不是使用默認的? – alessioalex

+0

因爲這就是教授想要的:) – Nili

+0

我在問,因爲還有3-4個人有類似的問題,我已經注意到那是他們的家庭作業:)) – alessioalex

回答

1

您的代碼有兩個主要問題。

  • 響應格式爲標頭,後跟兩組「\ r \ n」,然後是內容。 end()調用中的「\ r \ n」應該在str中。您還從第一個「\ r \ n」中錯過了'n'。
  • 你正在試圖讀取readstream的內容,這很好,但是你正在做所有的這些內部的蒸汽結束(),所以管道沒什麼可留,因爲數據已經全部發出了。

嘗試這樣的事情,而不是。創建讀取流,發送響應和管道然後休息。

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

此外,你可能需要一個writeStream而不是readStream :) – Marco

+0

他正在讀取文件readstream和管道到套接字,所以我認爲它是有道理的。 – loganfsmyth

+1

我的錯誤,我讀錯了問題。但是這個代碼仍然是錯誤的。 readStream - > writeStream。 fileStream.pipe(socket); – Marco

相關問題