2011-03-24 63 views
1

我有一個非常簡單的文件上傳例子req.pause()對完成請求暫停下一個請求

var http = require('http'); 
http.createServer(function(req, res){ 
    console.log(req.method); 
    if (req.method == 'GET'){ 
    res.writeHead(200); 
    res.write('<html><head></head><body><form method="POST" enctype="multipart/form-data"><input type="file" id="f" name="f"><input type="submit"></body></html>') 
    res.end(); 
    }else if(req.method == 'POST'){ 
    req.pause(); 
    res.writeHead(200); 
    res.end(); 
    }else{ 
    res.writeHead(404).end(); 
    } 
}).listen('8081'); 

我想要做的就是暫停上傳。雖然它正常工作與大文件時,小的(< = 100KB),這是在一個單一的一部分隨請求一同可能發送未暫停(這是罰款和理解的),而是在下一個請求到服務器暫停(即當我嘗試加載頁面時,它永遠不會到達console.log(req.method)一部分,但是當我再次刷新又回到了正常的),這絕對不是罰款。

好像會在一段時間蹦出一旦出錯,所以,當我沒有找到任何關於它的投訴,我很驚訝。你有什麼想法/可能的解釋/解決方法/修復建議?現在我檢查文件的大小是否低於某個閾值,但它看起來不太安全或優雅。

回答

1

我的意見的(可能是錯誤的),其req.pause導致底層套接字被暫停。驗證此要求的一種方法是添加報頭連接:關閉res.writeHead(200);這就是行後req.pause();。現在

,如果everyting開始工作正常(下一個請求沒有暫停),你可以說,基礎套接字暫停併爲下一個請求被重用。