2015-07-10 106 views
1

我想從我的lambda函數返回自定義錯誤類型。我如何控制在errorType屬性中顯示的內容,以便返回到我的api網關的錯誤?AWS Lambda:如何設置錯誤類型?

var err = new Error('foo'); 
context.fail(err); 

回報

{ 
    "errorMessage": "foo", 
    "errorType": "Error", 
    "stackTrace": [ 
    "exports.handler (/var/task/index.js:11:19)" 
    ] 
} 

我想操縱它,以便在響應中ERRORTYPE可以像"InvalidParam"

+0

你知道了嗎?我不確定你可以從lambda返回一個錯誤對象到API網關,也可以將HTTP狀態碼映射到它。 – ac360

+0

基於環視它看起來像你不能設置自定義錯誤類型 - 你必須設置錯誤字符串,並根據字符串只是映射錯誤類型,例如, http://stackoverflow.com/questions/31329495/is-there-a-way-to-change-the-http-status-codes-amazon-api-gateway-returns/3137186​​2#3137186​​2 – MonkeyBonkey

+0

我寫了一個[博客文章](http://www.jayway.com/2015/11/07/error-handling-in-api-gateway-and-aws-lambda/),我希望能與亞馬遜討論這在不久的將來。 – polythene

回答

1

返回的errorType表示在錯誤上設置的'name'屬性。

所以下面的代碼:

var error = new Error('Its an error!'); 
error.name = 'TheName'; 

context.fail(error); 

結果從LAMBDA到API網關以下回應:

{ 
    "errorMessage": "Its an error!", 
    "errorType": "TheName", 
    "stackTrace": [ 
    "exports.handler (/var/task/index.js:10:21)" 
    ] 
} 

不幸的是,這似乎API網關只有錯誤的正則表達式匹配到「的errorMessage '財產。至少基於我的嘗試以及我迄今爲止所讀到的內容。因此,如果您嘗試映射到狀態碼,設置錯誤類型將無濟於事。 (如評論中提到的)

獲得一點兩個世界的一種方法是在調用context.fail時「toString()」錯誤。這會將你的錯誤信息格式化爲「[name]:[error message]」。

然後,您可以將您的API網關錯誤正則表達式與特定錯誤「名稱」屬性相匹配。

所以調用:

var error = new Error('Its an error!'); 
error.name = 'TheName'; 

context.fail(error.toString()); 

當API網關正則表達式映射到狀態500:

TheName.* 

結果在以下狀態500 API網關響應:上

{ 
    "errorMessage": "TheName: Its an error!" 
} 
0

錯誤映射最近擴展了Lambda響應,將4xx狀態碼提供給客戶端,並且我們持續不斷g來改善這個功能。

邁克爾的答案是一個很好的發送名稱回來的消息。