我正在构建一个AWS API邮件服务,它基本上会在发送包含该主体数据的邮件之前检查请求的正文。它检查是否存在所有必需参数,并在数据符合我们要求的情况下进行一些基本检查。
问题是,即使Lambda函数抛出错误(我使用Lambda测试界面验证),API网关也会返回200
响应代码,并将错误对象作为正文
这意味着我得到这样的日志:
Tue Apr 11 14:23:43 UTC 2017 : Method response body after transformations:
{"errorMessage":"\"[BadRequest] Missing email\""}
Tue Apr 11 14:23:43 UTC 2017 : Method response headers: {X-Amzn-Trace-Id=Root=************, Content-Type=application/json}
Tue Apr 11 14:23:43 UTC 2017 : Successfully completed execution
Tue Apr 11 14:23:43 UTC 2017 : Method completed with status: 200
由于最后一部分,我相信API Gateway正在返回200
。
我做了一些设置错误处理的事情:
此时我不确定为什么它仍然无法返回正确的响应。我查看了有关此内容的各种帖子(包括:Is there a way to change the http status codes returned by Amazon API Gateway?和How to return error collection/object from AWS Lambda function and map to AWS API Gateway response code)并阅读了文档。
我也尝试了'Lambda代理方式',但是没有产生任何结果(lambda没有正确执行'。
有人看到我在这里缺少什么吗?
答案 0 :(得分:1)
我看到一些可能导致问题的事情。
引用了您的错误消息:"\"[BadRequest] Missing email\""
,因此^[BadRequest]
正则表达式与错误字符串不匹配。在我运行的简单测试中,我不得不逃避[]
(即\[\]
),因为方括号是为字符类保留的。
在不更改errorMessage格式的情况下,这样的模式应该有效:
^"\[BadRequest\].*