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 网关执行此操作:
如果用户在 header 中缺少必填字段,我将尝试发送 API 网关响应代码 401。我的 lambda 的响应如下:
{
"status": "Unauthorized user",
"body": ["username"]
}
在 AWS API 网关 -> 我的API -> 资源 -> PUT 操作 -> 集成响应中,我有 2 个条目。
1。对于默认 RegEx 模式(空白)的所有成功 --> 201 的方法响应状态
2。对于正则表达式匹配,如果我使用正则表达式上方 JSON 和正则表达式下方使用正则表达式或在线 regex101.com,则存在完全匹配。
.*\"Unauthorized user\".*
<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 网关执行此操作: