Mon*_*key 4 amazon-web-services aws-lambda aws-api-gateway
我想从我的 lambda 函数发送回自定义错误类型。如何控制 errorType 属性中显示的内容,以便将错误返回到我的 api 网关?
var err = new Error('foo');
context.fail(err);
Run Code Online (Sandbox Code Playgroud)
返回
{
"errorMessage": "foo",
"errorType": "Error",
"stackTrace": [
"exports.handler (/var/task/index.js:11:19)"
]
}
Run Code Online (Sandbox Code Playgroud)
我想操纵它,以便响应中的 errorType 可以是类似"InvalidParam".
返回的 errorType 表示在错误上设置的 'name' 属性。
所以下面的代码:
var error = new Error('Its an error!');
error.name = 'TheName';
context.fail(error);
Run Code Online (Sandbox Code Playgroud)
导致从 Lambda 到 API Gateway 的以下响应:
{
"errorMessage": "Its an error!",
"errorType": "TheName",
"stackTrace": [
"exports.handler (/var/task/index.js:10:21)"
]
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,API 网关似乎只将 Error Regex 与“errorMessage”属性匹配。至少基于我的尝试和到目前为止我所阅读的内容。因此,如果您尝试映射到状态代码,则设置错误类型将无济于事。(如评论中所述)
获得两全其美的一种方法是在调用 context.fail 时“toString()”你的错误。这会将您的错误消息格式化为“[name]:[error message]”。
然后,您可以将 API 网关错误正则表达式与特定的错误“名称”属性进行匹配。
所以调用:
var error = new Error('Its an error!');
error.name = 'TheName';
context.fail(error.toString());
Run Code Online (Sandbox Code Playgroud)
当 API Gateway Regex 映射到状态 500 时:
TheName.*
Run Code Online (Sandbox Code Playgroud)
导致以下状态 500 API 网关响应:
{
"errorMessage": "TheName: Its an error!"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1500 次 |
| 最近记录: |