Проблема
Используя функцию ответа интеграции AWS API Gateway, я могу успешно обрабатывать ошибки, которые выдает Lambda.Однако у меня возникают проблемы при сопоставлении объекта ошибки Javascript с шаблоном сопоставления.Объект ошибки выглядит следующим образом.
{
"errorMessage": "Error: ABC123",
"errorType": "Error",
"stackTrace": [
"exports.handler (/var/task/index.js:9:11)"
]
}
Вот мое отображение ответа интеграции для application/json
#set($errorMessage = $input.path('$.errorMessage'))
{
"message" : $errorMessage
}
Что я пробовал
Используя эту конфигурацию, этаполный ответ, возвращенный клиенту: Unexpected 'E'
.Это одна строка, которая не содержится в объекте JSON.
Этот E
, на который ссылается ошибка, является первым символом в моем выданном сообщении об ошибке, которое используется для соответствия регулярному выражению лямбда-ошибок.Я знаю это, когда я кратко изменил первую букву на X
, и я получил Unexpected 'X'
в качестве ответа.
Когда я изменяю первую строку моего шаблона отображения на это (отображение всего объекта вместо попыткипросто сопоставить свойство errorMessage
)
#set($errorMessage = $input.path('$'))
Я получаю только трассировку стека от объекта ошибки Javascript.
{
"message" : [
"exports.handler (/var/task/index.js:9:11)"
]
}
Это может означать, что либо whole *Объект ответа 1028 *, возвращаемый в API Gateway, является просто свойством stackTrace
из-за ошибки Javascript.Но для меня это не имеет смысла, поскольку что-то воспринимает errorMessage
как то, откуда приходит сообщение Unexpected 'E'
.
Аналогичным образом, когда я пытаюсь сопоставить свойство errorType
, я получаю ту же ошибку, поскольку она также начинается с E
.Я могу успешно сопоставить свойство message
только при использовании всего входного объекта $
или только свойства stackTrace
.
Что я здесь не так делаю?
Прочеекод
Вот модель ошибки шлюза API.Свойство message
четко помечено как тип string
, но оно работает только тогда, когда я возвращаю массив. Примечание: это код по умолчанию
{
"$schema" : "http://json-schema.org/draft-04/schema#",
"title" : "Error Schema",
"type" : "object",
"properties" : {
"message" : { "type" : "string" }
}
}
Вот код функции Lambda
exports.handler = async (event, context, callback) => {
throw new Error(Error: ABC123);
};