Je voulais qu'une erreur de Lambda soit une erreur 500 correcte, après avoir fait beaucoup de recherches, j'ai trouvé ce qui suit, qui fonctionne:
Sur LAMBDA
Pour une bonne réponse, je reviens comme ci-dessous:
exports.handler = (event, context, callback) => {
// ..
var someData1 = {
data: {
httpStatusCode: 200,
details: [
{
prodId: "123",
prodName: "Product 1"
},
{
"more": "213",
"moreDetails": "Product 2"
}
]
}
};
return callback(null, someData1);
}
Pour une mauvaise réponse, retour comme ci-dessous
exports.handler = (event, context, callback) => {
// ..
var someError1 = {
error: {
httpStatusCode: 500,
details: [
{
code: "ProductNotFound",
message: "Product not found in Cart",
description: "Product should be present after checkout, but not found in Cart",
source: "/data/attributes/product"
},
{
code: "PasswordConfirmPasswordDoesntMatch",
message: "Password and password confirmation do not match.",
description: "Password and password confirmation must match for registration to succeed.",
source: "/data/attributes/password",
}
]
}
};
return callback(new Error(JSON.stringify(someError1)));
}
Sur API Gateway
Pour une MÉTHODE GET, dites GET de / res1 / service1:
Through Method Response > Add Response, added 3 responses:
- 200
- 300
- 400
Ensuite,
Through 'Integration Response' > 'Add integration response', create a Regex for 400 errors (client error):
Lambda Error Regex .*"httpStatusCode":.*4.*
'Body Mapping Templates' > Add mapping template as:
Content-Type application/json
Template text box* $input.path('$.errorMessage')
Similarly, create a Regex for 500 errors (server error):
Lambda Error Regex .*"httpStatusCode":.*5.*
'Body Mapping Templates' > Add mapping template as:
Content-Type application/json
Template text box* $input.path('$.errorMessage')
Maintenant, publiez / res1 / service1, appuyez sur l'URL publiée, qui est connectée à lambda ci-dessus
Utilisé le plugin Chrome Advanced REST client (ou Postman), vous verrez les codes http appropriés comme l'erreur de serveur (500) ou 400, au lieu de 200 codes de réponse http pour toutes les requêtes qui ont été données dans "httpStatusCode".
Depuis le `` tableau de bord '' de l'API, dans API Gateway, nous pouvons voir les codes d'état http comme ci-dessous: