【问题标题】:How can I response exact error status code and message by Serverless framework?如何通过无服务器框架响应准确的错误状态代码和消息?
【发布时间】:2016-10-15 18:56:21
【问题描述】:

我通过以下命令创建了 Serverless 框架的功能:

sls function create some/api

然后创建了schelton代码:

'use strict';

module.exports.handler = function(event, context, cb) {
  return cb({
    message: 'Go Serverless! Your Lambda function executed successfully!'
  });
};

并且,响应模板如下:

s-function.json

  "responses": {
    "400": {
      "statusCode": "400"
    },
    "default": {
      "statusCode": "200",
      "responseParameters": {},
      "responseModels": {
        "application/json;charset=UTF-8": "Empty"
      },
      "responseTemplates": {
        "application/json;charset=UTF-8": ""
      }
    }
  }

但是,当我将错误对象返回给像cb(err, null)这样的回调函数时,错误消息正确显示,但statusCode是200。

如果我改为调用cb("400", err)这样的回调函数,那么statusCode正确返回400,但响应体不好:{"errorMessage":"400"}

有什么好的设置可以显示bot statusCode(不仅是400,还有401,403,404,500...等等)和错误信息?

【问题讨论】:

  • 假设您使用 API 网关来公开 Lambda 函数,这里有一个很好的讨论:stackoverflow.com/questions/31329495/…
  • 谢谢!这不是我想象的,但有了它,我可以用另一种方式解决我的问题。我稍后会总结结果。
  • 太棒了!期待您的发现。

标签: amazon-web-services aws-lambda serverless-framework


【解决方案1】:

我使用以下响应模板。如果 lambda 函数返回的消息与响应模板中指定的selectionPattern 匹配,则会返回正确的状态码。

"responseTemplate": {
    "400": {
        "selectionPattern": "^\\[BadRequest\\].*",
        "statusCode": "400"
    },
    "401": {
        "selectionPattern": "^\\[Unauthorized\\].*",
        "statusCode": "401"
    },
    "403": {
        "selectionPattern": "^\\[Forbidden\\].*",
        "statusCode": "403"
    },
    "404": {
        "selectionPattern": "^\\[NotFound\\].*",
        "statusCode": "404"
    },
    "409": {
        "selectionPattern": "^\\[Conflict\\].*",
        "statusCode": "409"
    },
    "500": {
        "selectionPattern": "^\\[Process exited|ServerError\\].*",
        "statusCode": "500"
    },
    "504": {
        "selectionPattern": "^\\[Task timed out\\].*",
        "statusCode": "504"
    },
    "default": {
        "statusCode": "200",
        "responseParameters": {},
        "responseModels": {},
        "responseTemplates": {
            "application/json": ""
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2017-09-07
    • 2018-02-19
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多