Amazon web services 无服务器框架如何响应准确的错误状态代码和消息?

Amazon web services 无服务器框架如何响应准确的错误状态代码和消息?,amazon-web-services,aws-lambda,serverless-framework,Amazon Web Services,Aws Lambda,Serverless Framework,我通过下面的命令创建了无服务器框架的函数: sls function create some/api 然后创建了谢尔顿代码: 'use strict'; module.exports.handler = function(event, context, cb) { return cb({ message: 'Go Serverless! Your Lambda function executed successfully!' }); }; 并且,响应模板如下所示: s-fu

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

sls function create some/api
然后创建了谢尔顿代码:

'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": ""
      }
    }
  }
但是,当我将error对象返回到回调函数(如
cb(err,null)
)时,错误消息被正确显示,但statusCode是200

若我改为调用回调函数,比如
cb(“400”,err)
,那个么statusCode正确地返回400,但响应体不好:
{“errorMessage”:“400”}


是否有好的设置来显示机器人状态代码(不仅400,还有40140340500…等等)和错误消息?

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

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