如何通过无服务器框架响应确切的错误状态代码和消息



我通过命令以下命令创建了无服务器框架的函数:

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)的回调函数时,将正确显示错误消息,但状态代码为200。

如果我更改为cb("400", err)这样的调用回调函数,则状态代码正确返回400,但是响应主体不好:{"errorMessage":"400"}

是否有任何良好的设置可以显示Bot Statuscode(不仅400,而且401,403,404,500 ...等)和错误消息?

我使用以下响应模板。如果从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": ""
        }
    }
}

相关内容

最新更新