1

每次我遇到语法错误或者我只想在AWS Lambda函数中发送自定义错误时,我都会得到相同的502错误网关响应(内部服务器错误)。使用API​​网关处理AWS Lambda函数中的错误

我想,简单的代码:

module.exports.saveImage = (event, context, callback) => { 
    callback("the sky is falling!"); // also tried sending new Error("the sky is falling!") 
} 

而仍然得到同样的“内部服务器错误”的回应,而不是定义一个。

这是我在serverless.yml文件功能:

saveImage: 
    handler: handler.saveImage 
    environment: 
    BUCKET: ${self:custom.bucket} 
    events: 
    - http: 
     path: saveImage 
     method: post 
     cors: true, 
     integration: lambda-proxy 

我可以从这篇文章误解的东西吗?它似乎收到“错误消息”:“天空正在下降!”在API网关响应中(这正是我所期望的)。

https://aws.amazon.com/es/blogs/compute/error-handling-patterns-in-amazon-api-gateway-and-aws-lambda/

+1

您是否配置了API网关的集成响应部分来处理Lambda的响应? –

+0

我用serverless.yml配置更新了我的问题。顺便说一句,如果我把错误的第二个参数,这样我可以接收响应: 回调(空,{ 体:JSON.stringify( { 消息:“我的错误” })} ); 这是我们应该如何处理错误?我认为我们可以使用第一个参数来发送错误。 – Emi

回答

2

如果使用integration: lambda-proxy,你需要从你的LAMBDA返回正确的错误响应,而不是从API网关。

在这种情况下,你可以使用哪些已经尝试过:

callback(null, { body: JSON.stringify({ errorMessage: "my error" }) 

我以为我们可以使用的第一个参数错误发送

你可以,如果你在使用integration: lambdaserverless.yml但在你的情况下,你不是。

+0

谢谢,我会看看他们之间的差异,如果它值得改变。 – Emi

+1

这是一个偏好问题,每个人都有自己的优点和缺点。请参阅https://stackoverflow.com/q/42474264/1252647。 – dashmug