2017-03-17 202 views
1

我有一个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 
       } 
       }); 
     } 
    }); 
}; 

回答

4

如果抛出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); 
+0

当我看到它,现在有这么多的意义,谢谢 – jmcgui05

0

,在我的情况问题是我的功能是没有返回任何东西context.done()。所以,而不是context.done(null),我做了context.done(null, {});