AWS:APIGateway 自定义响应正则表达式无法匹配

AWS: APIGateway custom response regex fails to match

如果用户在 header 中缺少必填字段,我将尝试发送 API 网关响应代码 401。我的 lambda 的响应如下:

{
    "status": "Unauthorized user",
    "body": ["username"]
}

在 AWS API 网关 -> 我的API -> 资源 -> PUT 操作 -> 集成响应中,我有 2 个条目。
1。对于默认 RegEx 模式(空白)的所有成功 --> 201 的方法响应状态
2。对于正则表达式匹配,如果我使用正则表达式上方 JSON 和正则表达式下方使用正则表达式或在线 regex101.com,则存在完全匹配。

.*\"Unauthorized user\".*

但是,在 API 测试期间同样失败,消息如下

<date_time in UTC> : Endpoint response body before transformations: {"status": "Unauthorized user", "body": ["username"] }
<date_time in UTC> : Execution failed due to configuration error: No match for output mapping and no default output mapping configured. Endpoint Response Status Code: 200
<date_time in UTC> : Method completed with status: 500

有人遇到过这个吗?如果我有 201 和空白正则表达式,我最终会得到一个 201...无论未经授权或内部错误或错误请求如何。

这是您问题中的图片:

注意第一列的 header 是如何表示 Lambda Error Regex 的吗?这意味着 API 网关只会尝试将该正则表达式与 Lambda 返回的错误进行匹配。但是 API 网关如何知道 Lambda 返回的是真正的响应还是错误?它根据 Lambda 是 return 响应还是 threw 异常知道这一点。

您的正则表达式不匹配,因为您返回了响应而不是将其作为异常抛出!

看看这个:

当我的 Node.js Lambda 这样做时:

exports.handler = async (event) => {
    const response = {
        "status": "Unauthorized user",
        "body": ["username"]
    }
    return response
}

我的 API 网关是这样做的:

但是当同一个 Lambda 执行此操作时:

exports.handler = async (event) => {
    const error = {
        "status": "Unauthorized user",
        "body": ["username"]
    }
    throw JSON.stringify(error)
}

API 网关执行此操作: