2014-04-08 73 views
0

我已經nginx的設置來限制上傳文件大小爲2MB,並Express中設置允許此相同的大小:處理nginx的錯誤/表達

nginx的:

server { 
    client_max_body_size 2M; 
} 

快遞:

app.use(express.limit('2mb')); 

在我的文件上傳處理程序中,我記錄了我得到的錯誤,並且在某個時候我收到了一個對象,它給了我狀態碼和更多有用的信息。重新啓動服務器後,我突然停止獲取該錯誤對象,現在獲取了一串HTML代替它。

的HTML是你所期望看到屏幕上nginx的輸出:

<html> 
<head><title>413 Request Entity Too Large</title></head> 
<body bgcolor="white"> 
<center><h1>413 Request Entity Too Large</h1></center> 
<hr><center>nginx/1.4.4</center> 
</body> 
</html> 

這是爲什麼?我怎樣才能確保我只返回一個錯誤對象,而不是這個非常有用的字符串?

發送響應回調:

callbacks.uploadFailure = function(err){ 
    res.send(413, err); 
}; 

,我也曾嘗試返回JSON:

callbacks.uploadFailure = function(err){ 
    res.json(413, err); 
}; 

之前,我可以這樣做:

if(err.error.status === 413) {$scope.errmsg = 'File upload too large.'} 

但現在我不能這樣做,因爲err完全由上面列出的html字符串組成,我需要解析這個字符串來確定呃錯誤是什麼。顯然我不想那樣做。

任何建議或解釋爲什麼我沒有得到一個錯誤對象的工作?

+0

我懷疑問題在於,Nginx在您的Express代碼之前正在收集錯誤。嘗試使nginx中的值稍微高一些(比如3M),然後重新啓動服務器。 –

+0

就是這樣。我想我可以將nginx設置爲一個非常高的值,並拋出一些代碼來處理它作爲邊緣情況。請做出正確答案,Hector,我可以接受。謝謝! – Stuart

回答

1

我懷疑問題在於,Nginx在你的Express代碼之前正在收集錯誤,這就是爲什麼你看到Nginx錯誤頁面而不是你的快速響應。

嘗試使nginx中的值稍微高一些(比如3M)並重新啓動服務器。