2017-06-20 62 views
-1
router.route('...') 
.get(function(req, res, next) { 
    // This job() function doing some *long* async task and end of the task calling 3th param as callback  
    job(param1, param2, function(response) { 
    // printing response to console perfectly 
    console.log("callback fired", response); 
    res.send("response"); 
    }); 
}); 

而我正在以curl來提出我的要求。在ExpressJS上儘早結束的請求

$ curl ... -m 300 
curl: (52) Empty reply from server 

捲曲等待了幾分鐘的迴應,然後我得到空回覆錯誤。 cURL在 nodejs打印回調觸發消息之前給出此錯誤

如果我用瀏覽器或郵遞員發出此請求,則會出現同樣的錯誤。

我敢肯定,res.end()函數裏面沒有job()異步函數。我卡住了,我如何跟蹤並發現錯誤?

回答

1

有兩種可能的超時可能會影響到你。沒有看到實際的網絡跟蹤(查看請求結束時會發生什麼),我無法確定哪個超時可能會導致您的問題。但是,你可以解決他們兩個,它應該處理你的問題。

首先,curl有一個超時值。目前還不清楚它的默認設置是什麼,但您可以設置任何您想要的值:

curl --max-time 900 

其中值以秒爲單位。其次,nodejs http服務器有一個超時,如果沒有響應被髮送到一個打開的請求,它將關閉套接字(這會防止套接字隨着時間的推移而建立起來)。你可以看到server.setTimeout()here的文檔。 http服務器對象的默認值是2分鐘(我不知道Express是否改變了這一點)。

的總體思路是這樣的:

server.setTimeout(10 * 60 * 1000); // set response timeout to 10 minutes 

其中server對象將是你的HTTP服務器對象(不屬於快速app對象)。

+0

你猜我的問題是http服務器的默認超時設置。所以我把這個值從2分鐘增加到5分鐘,我的問題就解決了。謝謝。 – Eray