Aws lambda 返回AWS Lambda错误上的自定义http状态代码

Aws lambda 返回AWS Lambda错误上的自定义http状态代码,aws-lambda,axios,serverless,Aws Lambda,Axios,Serverless,我正在使用AWS Lambda with serverless framework,我希望在出现错误时返回一个自定义http状态代码,但在使用axios调用端点时,我总是得到一个502状态代码 module.exports.handler = async (event, context, callback) => { try { // some stuff } catch (err) { // error here let myErrorObj = { errorTyp

我正在使用AWS Lambda with serverless framework,我希望在出现错误时返回一个自定义http状态代码,但在使用axios调用端点时,我总是得到一个502状态代码

module.exports.handler = async (event, context, callback) => {

try {
 // some stuff
} catch (err) {
 // error here
 let myErrorObj = {
      errorType : "InternalServerError",
      httpStatus : 500,
      requestId : context.awsRequestId,
      trace : {
        "function": "abc()",
        "line": 123,
        "file": "abc.js"
      },
      body: err
    }

    callback(JSON.stringify(myErrorObj));
}
}
但是我要返回的对象包含属性状态:502和数据。消息:内部服务器错误


你知道这是怎么回事吗

您是否将API网关与Lambda一起使用?如果是这样,则回调中返回的内容不正确。返回的对象必须与此格式匹配:

因此,您可以直接调用backerr并让AWS生成一个500,或者如果您希望添加类似以下内容的错误上下文:

let myErrorObj = {
    statusCode : 500,
    body: JSON.stringify({
        requestId : context.awsRequestId,
        trace : {
            "function": "abc()",
            "line": 123,
            "file": "abc.js"
        }
        error: err
      }
    })
}
callback(null, myErrorObj);
如果需要requestId和trace属性,则需要将它们添加到正文中。

状态代码502表示lambda对API网关的响应格式不正确

异步函数的正确响应如果不是serverless YAML文件中规定的集成方法,它将使用Lambda代理集成:

回调仅适用于非异步函数。请参阅全文

export const dummyFunction = async (event, context, callback) => 
{
 // ... logic
   return {
   statusCode: 500,
   body: JSON.stringify({...data}),
   }
};