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);,它就会按预期工作,因为第一个参数为空。