Aws lambda 在serverless.yml文件中,如何自定义默认http响应模板?
看看这里的文档,似乎没有太多关于设置这些模板的细节 我目前希望删除默认的Aws lambda 在serverless.yml文件中,如何自定义默认http响应模板?,aws-lambda,aws-api-gateway,serverless-framework,Aws Lambda,Aws Api Gateway,Serverless Framework,看看这里的文档,似乎没有太多关于设置这些模板的细节 我目前希望删除默认的application/json内容类型,它是在创建处理程序的集成响应(如下图所示)期间生成的,并将其替换为text/html。是否有定义的语法用于如何在某个隐藏的地方执行此操作?或者在框架的当前范围内不可能实现这种定制级别 这是我在serverless.yml中定义的端点 events: - http: method: any path: / inte
application/json
内容类型,它是在创建处理程序的集成响应(如下图所示)期间生成的,并将其替换为text/html
。是否有定义的语法用于如何在某个隐藏的地方执行此操作?或者在框架的当前范围内不可能实现这种定制级别
这是我在serverless.yml中定义的端点
events:
- http:
method: any
path: /
integration: lambda
request:
region: ${env:AwsRegion}
response:
headers:
Content-Type: "'text/html'"
template: $input.path('body')
- http:
method: any
path: /{proxy+}
在AWS Api网关上生成以下配置:
作为猜测,我确实尝试过这样修改规范,但它抛出了一个语法错误:
template:
text\html: $input.path('body')
让它工作
框架似乎并不真正支持这一点,但可以通过(ab)在无服务器模板中使用statusCodes
将其黑客攻击在一起
将响应模板移动到状态代码下,并为该状态代码提供一个模式
,就完成了我认为您所追求的目标。语法:
- http:
method: any
path: /
integration: lambda
request:
region: us-east-1
response:
headers:
Content-Type: "'text/html'"
statusCodes:
200:
pattern: ""
template:
text/html: $input.path('body')
注意:模式和模板都必须存在
真的有那么糟糕吗?
这最终取决于你。我称之为黑客,因为:
- 如果能够在
response.template
级别提供,而不是在response.statusCodes.200.template
级别提供,那就更好了
- 指定一个或多个
statusCodes
将删除未指定任何值时获得的默认lambda错误正则表达式集
- 它感觉像是在处理这样一个事实,即
response.template
只接受一个字符串,而它可以(应该?)接受一个字符串或一个对象(就像它在statusCodes
下所做的那样)
修好它?
来自/lib/plugins/aws/package/compile/events/apiGateway/lib/method/integration.js
:
if (http.response.template) {
_.merge(integrationResponse.ResponseTemplates, {
'application/json': http.response.template,
});
}
if (config.template) {
const template =
typeof config.template === 'string'
? { 'application/json': config.template }
: config.template;
_.merge(integrationResponse.ResponseTemplates, template);
}
我认为在response.template
下,第一个if()
中的代码需要更像第二个if()
中的代码,我认为对于响应模板,您只需将其放入template
中即可<代码>模板:$input.path('body')
。响应类型由内容类型处理。对于请求模板,您可以根据内容类型使用不同的模板,在这种情况下,您可以按照尝试的方式进行操作。