2015-07-10 66 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来改善这个功能。

迈克尔的答案是一个很好的发送名称回来的消息。