Make It Work
Похоже, что на самом деле это не поддерживается фреймворком, но его можно взломать, используя (ab) statusCodes
в вашем бессерверном шаблоне.
Перемещение шаблона ответа в соответствии с кодом состояния и предоставление pattern
для этого кода состояния завершает то, что, я думаю, вы ищете. Синтаксис:
- 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')
Примечание: должны присутствовать pattern
и template
.
Это действительно так плохо?
Это в конечном итоге, до вас. Я называю это хаком, потому что:
- Было бы намного лучше иметь возможность поставить это на уровне
response.template
, а не на response.statusCodes.200.template
. - Указание один или несколько
statusCodes
удаляет набор регулярных выражений лямбда-ошибок по умолчанию, которые вы получаете, когда вы их не указываете. - Такое ощущение, что нужно обойти тот факт, что
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()
.