【问题标题】:Passing custom errors back to AWS API Gateway from AWS Lambda using node.js使用 node.js 从 AWS Lambda 将自定义错误传递回 AWS API Gateway
【发布时间】:2021-09-24 21:35:56
【问题描述】:

我真的希望能够通过 API 网关将自定义错误从我的 Lambda 函数中传回。

我是这样产生错误的:

if (error) { // failure

        APIGatewayResult = { // set error object
            statusCode: 608,
            message: 'File upload to buffer failed.',
            error: error
        };
        done();

    };

我很确定上面的格式要么解析不正确,要么我无法像这样将其传回:

done = (err, res) => callback(null, {
        statusCode: err ? APIGatewayResult.statusCode : APIGatewayResult.statusCode,
        body: err ? JSON.stringify(APIGatewayResult) : JSON.stringify(APIGatewayResult),
        headers: {
            'Content-Type': 'application/json',
        },
});

我希望从 API 网关得到的响应如下所示:

{
    "statusCode": 608,
    "message": "File upload to buffer failed.",
    "error": {}
}

而不是这个:

{
    "message": "Internal server error"
}

【问题讨论】:

  • 由于lambda内部未处理的错误发生内部服务器错误,您可以查看cloudwatch日志找出错误。
  • @Jishnu - 重点是创建一个我可以出售给其他人的 API。他们将无法访问 cloudwatch,但可以访问 API 网关的响应。

标签: node.js amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

您的问题分为两部分:

1) API Gateway 中如何处理 Lambda 错误消息:

有许多可用的指南解释了如何在 API Gateway 中解析 Lambda 错误响应,以将它们以所需的格式返回给消费者。例如:Error Handling Patterns in Amazon API Gateway and AWS Lambda

请注意,您将 null 解析为 lambda 回调函数的第一个参数。第一个参数是错误响应消息,因此通过将其提供为 null,Lambda 将成功返回 200 响应给 API Gateway。

2) 如何覆盖 API Gateway 中的通用未处理异常消息:

这是必需的,因为如 cmets 中所述,您收到的错误似乎是由于您的应用程序中未处理的异常而引发的。您需要查看日志以确定问题的根源。

但要更改默认错误响应对象的格式,您需要添加自定义Gateway response in API Gateway

鉴于提供的信息有限,很难提供更具体的示例,但这应该足以为您指明正确的方向以找到所需的内容。

【讨论】:

  • 谢谢!没有你的帮助,我仍然会用钥匙敲打我的头。
猜你喜欢
  • 2019-09-29
  • 2019-11-18
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 2021-10-23
  • 2017-12-07
相关资源
最近更新 更多