【问题标题】:How to let API Gateway Proxy Error Responses?如何让 API Gateway 代理错误响应?
【发布时间】:2022-01-30 07:11:42
【问题描述】:

我在 Lambda 前面有一个 API 网关。

来自 Lambda (HTTP 2xx) 的成功响应会转发响应正文。

但是,对于错误响应(HTTP 5xx 和其他),API Gateway 使用响应模板转换响应正文。

有没有办法避免这种情况?要获得来自 Lambda 的原始错误响应正文?

在我的 Lambda 中,我有这个:

return callback(generalError, {
            statusCode: 500,
            headers:{
                "content-type": "application/json"
            },
            body: JSON.stringify({
                error: 'INTERNAL_ERROR',
                description: error.message,
            })
        });

但是,作为网关的输出,我得到了这个:

{ "error": "Internal server error" }

不匹配。 Lambdas 响应。它确实与 API Gateway 中的响应模板匹配:

{"message":$context.error.messageString}

但是,有没有办法只代理原始 Lambda 响应而不是进行此转换?

【问题讨论】:

  • 什么是generalError?另外,我不知道 return callback(...) 会导致问题(特别是您在此处使用 return),但如果可能的话我会避免它。并查看Handle custom Lambda errors in API Gateway
  • @jarmod 这只是一个 json 对象,即使用文本字符串替换它也行不通,因为它会被网关响应模板替换。我会看看那个链接谢谢!

标签: amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

我找到了它不起作用的原因。

如果您将回调设置为 500 错误,包括带有 error 字段的对象,则无论其他输出或实际错误如何,这都会以某种方式成为完整响应。

避免使用error 字段可以解决问题!我将其重命名为 serviceError,现在我得到了我预期的响应。

【讨论】:

    猜你喜欢
    • 2017-10-04
    • 2023-04-03
    • 2020-07-19
    • 2017-08-08
    • 2017-03-14
    • 2016-05-10
    • 2018-06-03
    • 2021-01-08
    • 1970-01-01
    相关资源
    最近更新 更多