2015-07-10 2 views
1

Я хотел бы отправить пользовательские типы ошибок обратно из моей лямбда-функции. Как я могу контролировать, что отображается в свойстве errorType, поэтому ошибка, возвращаемая на мой api-шлюз?AWS Lambda: как установить тип ошибки?

var err = new Error('foo'); 
context.fail(err); 

возвращает

{ 
    "errorMessage": "foo", 
    "errorType": "Error", 
    "stackTrace": [ 
    "exports.handler (/var/task/index.js:11:19)" 
    ] 
} 

Я хотел бы работать с ним так, чтобы ERRORTYPE в ответ может быть что-то вроде "InvalidParam".

+0

Вы поняли это? Я не уверен, что вы можете вернуть объект ошибки из лямбда в шлюз API, а также иметь возможность сопоставлять ему код состояния HTTP. – ac360

+0

, основанный на взгляде вокруг, похоже, что вы не можете устанавливать собственные типы ошибок - вам нужно установить строку ошибки и просто отображать типы ошибок на основе строк, например. http://stackoverflow.com/questions/31329495/is-there-a-way-to-change-the-http-status-codes-amazon-api-gateway-returns/31371862#31371862 – MonkeyBonkey

+0

Я написал [ сообщение в блоге по этой теме] (http://www.jayway.com/2015/11/07/error-handling-in-api-gateway-and-aws-lambda/), и я надеюсь поговорить с Amazon относительно это в ближайшем будущем. – polythene

ответ

1

Возвращенный тип ошибки представляет собой свойство 'name', установленное в ошибке.

Так следующий код:

var error = new Error('Its an error!'); 
error.name = 'TheName'; 

context.fail(error); 

Результаты в следующей реакции от лямбда-API шлюза:

{ 
    "errorMessage": "Its an error!", 
    "errorType": "TheName", 
    "stackTrace": [ 
    "exports.handler (/var/task/index.js:10:21)" 
    ] 
} 

К сожалению, кажется, что API шлюза только соответствует ошибке Regex к «ErrorMessage ' имущество. По крайней мере, исходя из моих попыток и того, что я читал так далеко. Поэтому установка типа ошибки не поможет, если вы пытаетесь сопоставить коды состояния. (как указано в комментариях)

Один из способов получить немного двух миров - это «toString()» ваша ошибка при вызове context.fail. Это отформатирует ваше сообщение об ошибке как «[имя]: [сообщение об ошибке]».

Затем вы можете сопоставить свое правило API Gateway Error Regex с конкретным свойством «имя».

Так телефону:

var error = new Error('Its an error!'); 
error.name = 'TheName'; 

context.fail(error.toString()); 

Когда API шлюза Regex отображается на статус 500:

TheName.* 

Результаты в следующем состоянии 500 API шлюза ответ:

{ 
    "errorMessage": "TheName: Its an error!" 
} 
0

отображение ошибок на Недавно были добавлены ответы лямбда, чтобы вернуть коды статуса 4xx клиенту, и мы продолжаем g, чтобы улучшить эту функцию.

Ответ Майкла является хорошим, чтобы отправить имя вместе с сообщением.