Quería que un error de Lambda fuera el error 500 correcto, después de investigar mucho, se me ocurrió lo siguiente, que funciona:
En LAMBDA
Para una buena respuesta, vuelvo de la siguiente manera:
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);
}
Para una mala respuesta, regresando como se muestra a continuación.
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)));
}
En API Gateway
Para obtener un método GET, diga GET of / res1 / service1:
Through Method Response > Add Response, added 3 responses:
- 200
- 300
- 400
Luego,
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')
Ahora, publique / res1 / service1, presione la URL publicada, que está conectada a lambda anterior
Si usó el complemento de Chrome del cliente REST avanzado (o Postman), verá los códigos http adecuados, como el error del servidor (500) o 400, en lugar del código de respuesta 200 http para todas las solicitudes que se dieron en "httpStatusCode".
Desde el 'Panel de control' de API, en API Gateway, podemos ver los códigos de estado http como se muestra a continuación: