【发布时间】:2017-01-26 04:08:39
【问题描述】:
我一直在尝试为错误响应状态(并且失败)注入自定义标头。
我使用了一个非常简单的 lambda
exports.handler = (event, context, callback) => {
// TODO implement
//callback(null, 'Hello from Lambda');
var error = {
name:"error",
message:"I am a failure",
statusCode: 400
};
error["x-test"] = 'foo';
callback(JSON.stringify(error), null);
};
在api网关中,我做了以下操作:
设置 CORS 以包含 x-test
响应模板 = "$input.path('$.errorMessage')"
要包含的响应参数:
method.response.header.x-test = integration.response.body.x-test
另外,我有一个使用 '.*statusCode.*?400.*' 映射的 statusCode
结果是空的。
所以我决定退后一步,看看如果我这样做会发生什么:
method.response.header.x-test = integration.response.body
我发现我得到了errorMessage的字符串化响应。
{"x-test":"{\"errorMessage\":\"{\\\"name\\\":\\\"error\\\",\\\"message\\\":\\\"I am a failure\\\",\\\"statusCode\\\":400,\\\"x-test\\\":\\\"foo\\\"}\"}"}
所以我决定通过执行以下操作更改响应模板以将其强制为 json:
响应模板 = "$util.parseJson($input.path('$.errorMessage'))"
我仍然得到字符串化的响应:
{"x-test":"{\"errorMessage\":\"{\\\"name\\\":\\\"error\\\",\\\"message\\\":\\\"I am a failure\\\",\\\"statusCode\\\":400,\\\"x-test\\\":\\\"foo\\\"}\"}"}
我的猜测是它并没有按预期进行转换,而只是用于最终输出。
那么你将如何获取一个值并将其塞入标题中?
谢谢, 凯莉
【问题讨论】:
标签: aws-lambda aws-api-gateway