AWS API 网关和 Lambda 中的错误处理总是 return 502
Error Handling in AWS API Gateway and Lambda always return 502
我使用无服务器来实现 Lambda 和 Api 网关。
当我实施错误处理时,下面的代码总是得到 502 bad gateway。
handler.js
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 400,
headers: {
"Content-Type" : "application/json"
},
body: JSON.stringify({
"status": "error",
"message": "Missing Params"
})
};
callback(response);
};
CloudWatch 做日志错误。
{
"errorMessage": "[object Object]"
}
我按照以下 AWS 博客中的方法 "Custom error object serialization" 以这种方式编码。
Ref
我将回调第一个参数更改为空并且工作正常。 Ref
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 400,
headers: {
"Content-Type" : "application/json"
},
body: JSON.stringify({
"status": "error",
"message": "Missing Params"
})
};
callback(null, response);
};
这是 Node.js 中的常见模式,它称为 错误优先回调。
基本上,如果您将第一个参数传递给回调,它将被视为错误并进行处理。
正如您提到的,一旦您输入 callback(null, response);
,它就会按预期工作,因为第一个参数为空。
我使用无服务器来实现 Lambda 和 Api 网关。 当我实施错误处理时,下面的代码总是得到 502 bad gateway。
handler.js
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 400,
headers: {
"Content-Type" : "application/json"
},
body: JSON.stringify({
"status": "error",
"message": "Missing Params"
})
};
callback(response);
};
CloudWatch 做日志错误。
{
"errorMessage": "[object Object]"
}
我按照以下 AWS 博客中的方法 "Custom error object serialization" 以这种方式编码。 Ref
我将回调第一个参数更改为空并且工作正常。 Ref
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 400,
headers: {
"Content-Type" : "application/json"
},
body: JSON.stringify({
"status": "error",
"message": "Missing Params"
})
};
callback(null, response);
};
这是 Node.js 中的常见模式,它称为 错误优先回调。
基本上,如果您将第一个参数传递给回调,它将被视为错误并进行处理。
正如您提到的,一旦您输入 callback(null, response);
,它就会按预期工作,因为第一个参数为空。