4

我想从我的 lambda 函数发回自定义错误类型。如何控制 errorType 属性中显示的内容,以便将错误返回到我的 api 网关?

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

返回

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

我想对其进行操作,以便响应中的 errorType 可以类似于"InvalidParam".

4

2 回答 2

5

返回的 errorType 表示在错误上设置的“名称”属性。

所以下面的代码:

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

context.fail(error);

导致从 Lambda 到 API Gateway 的以下响应:

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

不幸的是,API 网关似乎只将错误正则表达式与“errorMessage”属性匹配。至少基于我的尝试和我到目前为止所读到的内容。因此,如果您尝试映射到状态代码,设置错误类型将无济于事。(如评论中所述)

获得一点点两全其美的一种方法是在调用 context.fail 时“toString()”你的错误。这会将您的错误消息格式化为“[name]:[error message]”。

然后,您可以将您的 API Gateway 错误正则表达式与特定的错误“名称”属性相匹配。

所以调用:

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

context.fail(error.toString());

当 API Gateway Regex 映射到状态 500 时:

TheName.*

导致以下状态 500 API 网关响应:

{
  "errorMessage": "TheName: Its an error!"
}
于 2015-11-19T06:53:15.810 回答
0

Lambda 响应的错误映射最近被扩展为向客户端提供 4xx 状态代码,我们将继续改进此功能。

迈克尔的回答是将姓名与消息一起发回的好方法。

于 2015-12-17T23:09:06.563 回答