使用 Lambda 来自 API 网关的无服务器离线自定义错误

Serverless offline custom error from API gateway with Lambda

有什么方法可以从 API 网关 return 自定义错误对象和状态代码吗?我正在获得 200 状态。

 var response = {
    status: 400,
    errors: [
       {
          code:   "226",
          message: "Password and password confirmation do not match."
        }
    ]
 }

context.done(JSON.stringify(response));

如果您想响应错误,则必须使用带有错误响应结构的成功回调。

如果您使用 context.fail() 回调,AWS 将假定 Lambda 在技术上失败并使用 API 网关中存在的默认映射进行响应。

示例错误响应:

'use strict';

module.exports.hello = (event, context, callback) => {
  const response = {
    statusCode: 400,
    body: JSON.stringify({
      errors:[{
        code: "226",
        message:"Password confirmation do not match"
      }]
    }),
  };
  context.done(null, response);
};

这样我就可以更改 API 网关。我可以管理我的 API 对使用 s-templates.json 添加此代码库的响应。

ValidationError":{
  "selectionPattern": ".*ValidationError.*",
  "statusCode": "400",
  "responseParameters": {
    "method.response.header.Access-Control-Allow-Headers": "'Content-
    Type,X-Amz-Date,Authorization,X-Api-Key,Cache-Control,Token'",
    "method.response.header.Access-Control-Allow-Methods": "'*'",
    "method.response.header.Access-Control-Allow-Origin": "'*'"
  },
  "responseModels": {},
  "responseTemplates": {
    "application/json": "$input.path('$.errorMessage')"
  }
}

这样我 return 我的回复是 400 statusCode 和一条有效消息。

module.exports.handler = function(event, context) {
  const validationError={
    statsCode:"ValidationError",
    section:"Login",
    validationType:"emailConfirmation",
    message:"Email is not confirmed",
    otherInfo:"Would you like to get the email again?",
    client:"web|ios|android"
  }
  context.done(null, response);
};