我有一个集成到API网关的AWS Lambda。当前的lambda只是返回错误:
exports.handler = (event, context, callback) => {
context.fail(JSON.stringify({
status: 500,
errors: 'This is definitely the same endpoint.'
}));
};
我已在API网关的方法响应中添加了HTTP状态500响应,并已使用regex *“ status”:500. *将集成响应映射到500响应。
当我使用AWS中的方法测试功能对此进行测试时,我得到了500个期望的响应:
但是当使用Postman向终端发送命令时,我的状态为200:
怎么可能?方法测试似乎表明我的集成响应和方法响应设置正确无误,并且我的正则表达式设置正确,但是在API网关和世界其他地方之间会丢失什么,而这会产生不同的结果?
答案 0 :(得分:1)
您是否尝试过部署API?也许重新部署可能会解决问题。
答案 1 :(得分:0)
您是否已经偶然发现了Handle Custom Lambda Errors in API Gateway指南?
建议的格式为:
{
"isBase64Encoded" : "boolean",
"statusCode": "number",
"headers": { ... },
"body": "JSON string"
}
因此,您基本上需要返回此JSON结构。我使用AWS serverless express library(第100-105行)进行了检查-我们使用了它-并且返回了此结构。
主要挑战在于,将HTTP响应发送到客户端是API网关的任务,而要这样做,您必须以API网关无法理解的格式从lambda返回有效的JSON响应。 lambda的执行状态也将为200(因为它可以正常工作),但是API网关会将您的响应转换为500。这也是为什么您要使用这种双重/三重JSON编码(JSON中的JSON-as-string)的原因-属性)。