来自带有Lambda的API网关的无服务器脱机自定义错误

时间:2017-06-21 07:07:03

标签: aws-lambda serverless-framework

有没有办法从API网关返回自定义错误对象和状态代码?我获得200状态。

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

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

2 个答案:

答案 0 :(得分:3)

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

如果您正在使用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);
};

答案 1 :(得分:1)

这样我可以更改API Gatway。我可以管理我的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')"
  }
}

这样我就可以使用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);
};