AWS API网关错误响应生成502“错误的网关”
问题描述:
我有一个LAMBDA_PROXY合并请求类型的API网关。在Lambda中调用context.succeed后,如预期的那样(如下所示)将响应头以代码302发回。不过,我想处理500和404错误,我可以肯定,到目前为止的唯一的事情,是我错误地返回错误,因为我得到502错误的网关。我的情况有什么问题?AWS API网关错误响应生成502“错误的网关”
这里是我的handler.js
const handler = (event, context) => {
//event consists of hard coded values right now
getUrl(event.queryStringParameters)
.then((result) => {
const parsed = JSON.parse(result);
let url;
//handle error message returned in response
if (parsed.error) {
let error = {
statusCode: 404,
body: new Error(parsed.error)
}
return context.fail(error);
} else {
url = parsed.source || parsed.picture;
return context.succeed({
statusCode: 302,
headers: {
Location : url
}
});
}
});
};
答
如果抛出lambda函数(或context.fail)内的异常,API网关读取它,就好像出了毛病与你的后端和回报502.如果这是您期望,并希望返回404分之500,使用context.succeed方法你想要的状态代码和消息的运行时异常:我有同样的问题
if (parsed.error) {
let error = {
statusCode: 404,
headers: { "Content-Type": "text/plain" } // not sure here
body: new Error(parsed.error)
}
return context.succeed(error);
答
,在我的情况问题是我的功能是没有返回任何东西context.done()
。所以,而不是context.done(null)
,我做了context.done(null, {});
当我看到它,现在有这么多的意义,谢谢 – jmcgui05