在无服务器框架 1.5 中使用 lambda 集成修改响应 header / body / 状态码
Modify response header / body / status code with lambda integration in Serveless framework 1.5
我使用 Serveless 框架 1.5。
使用"lambda-proxy integration",修改响应header/body/状态码非常容易。
callback(null, {
status: 200,
headers: {
'STRING_VALUE': 'STRING_VALUE'
},
body: 'STRING_VALUE'
});
但我想使用 path_info 值,所以我使用 serverless.yml 如下所示:
functions:
hello:
handler: handler.hello
events:
- http:
path: hello/{hi}
method: get
integration: lambda
request:
parameters:
paths:
hi: true
要获得 path_info 设置必须使用 "lambda integration"。
但我也想修改 response header / body / response 的状态码。
我应该如何进行设置以使用 "lambda integration" 修改这些响应值?
此致,
==后记==
提交问题后,我找到了文档:
https://serverless.com/framework/docs/providers/aws/events/apigateway/#lambda-integration
据此可定制body:
response:
headers:
Content-Type: "'text/html'"
template: $input.path('$')
但是,对于响应 header,文件说:
response:
headers:
Content-Type: integration.response.header.Content-Type
Cache-Control: "'max-age=120'"
我的设置和上面一样,代码handler.js如下:
callback(null, {
header: {'Content-Type': 'image/png'}
});
虽然 header content_type 没有变成 'image/png'。
如何动态修改响应 header?
To get path_info setting must use "lambda integration".
您可以使用 Lambda 代理集成访问路径参数:
event["pathParameters"]["id"]
只要记得先检查 event["pathParameters"] !== null
是否有机会在没有任何路径参数的情况下调用您的 Lambda。
我自己找到了问题的答案:
要更改 header,serverless.yml 设置必须是:
response:
headers:
Content-Type: "integration.response.body.headers.Content-Type"
template: $input.path('$.body')
响应代码必须是:
callback(null, {
headers: {'Content-Type': 'image/jpeg'},
body: body
});
一个容易混淆的地方是,“$ in response template”和"integration.response.body in setting of header mapping"是同一个意思。
所以,"$.body" 与 "integration.response.body.body".
相同
要更改状态代码,我们应该使用错误 object。
const status = err ? new Error('[404] Not found') : null;
callback(status, {
headers: {'Content-Type': 'image/jpeg'},
body: body
});
我使用 Serveless 框架 1.5。
使用"lambda-proxy integration",修改响应header/body/状态码非常容易。
callback(null, {
status: 200,
headers: {
'STRING_VALUE': 'STRING_VALUE'
},
body: 'STRING_VALUE'
});
但我想使用 path_info 值,所以我使用 serverless.yml 如下所示:
functions:
hello:
handler: handler.hello
events:
- http:
path: hello/{hi}
method: get
integration: lambda
request:
parameters:
paths:
hi: true
要获得 path_info 设置必须使用 "lambda integration"。 但我也想修改 response header / body / response 的状态码。 我应该如何进行设置以使用 "lambda integration" 修改这些响应值?
此致,
==后记==
提交问题后,我找到了文档: https://serverless.com/framework/docs/providers/aws/events/apigateway/#lambda-integration
据此可定制body:
response:
headers:
Content-Type: "'text/html'"
template: $input.path('$')
但是,对于响应 header,文件说:
response:
headers:
Content-Type: integration.response.header.Content-Type
Cache-Control: "'max-age=120'"
我的设置和上面一样,代码handler.js如下:
callback(null, {
header: {'Content-Type': 'image/png'}
});
虽然 header content_type 没有变成 'image/png'。 如何动态修改响应 header?
To get path_info setting must use "lambda integration".
您可以使用 Lambda 代理集成访问路径参数:
event["pathParameters"]["id"]
只要记得先检查 event["pathParameters"] !== null
是否有机会在没有任何路径参数的情况下调用您的 Lambda。
我自己找到了问题的答案:
要更改 header,serverless.yml 设置必须是:
response:
headers:
Content-Type: "integration.response.body.headers.Content-Type"
template: $input.path('$.body')
响应代码必须是:
callback(null, {
headers: {'Content-Type': 'image/jpeg'},
body: body
});
一个容易混淆的地方是,“$ in response template”和"integration.response.body in setting of header mapping"是同一个意思。
所以,"$.body" 与 "integration.response.body.body".
要更改状态代码,我们应该使用错误 object。
const status = err ? new Error('[404] Not found') : null;
callback(status, {
headers: {'Content-Type': 'image/jpeg'},
body: body
});