如何使用Gateway API和Lambda代理处理错误?

时间:2019-11-23 19:33:12

标签: jquery amazon-web-services aws-lambda aws-api-gateway aws-serverless

从Node.js中的Lambda出现问题时,我正在响应以下内容:

            if (error) {
                logger.error(error.errorMessage, error.stack);
                callback('Error getting some data', {
                    statusCode: 500,
                    headers: {"Access-Control-Allow-Origin": "*"}
                });
            }

直接从Gateway API控制台测试端点,我可以看到以下响应:

enter image description here

总结:

  1. 我从Lambda回复500错误
  2. 在API中,我可以看到502错误响应

有人可以解释这种奇怪的行为吗?

1 个答案:

答案 0 :(得分:0)

问题是回调函数的第一个参数。我正在这样做:

if (error) {
   logger.error(error.errorMessage, error.stack);
   callback('Error getting some data', {
      statusCode: 500,
      headers: {"Access-Control-Allow-Origin": "*"}
   });
}

当我需要将null作为第一个参数传递给回调时。例如:

if (error) {
   logger.error(error.errorMessage, error.stack);
   callback(null, {
       statusCode: 500,
       headers: {"Access-Control-Allow-Origin": "*"}
   });
}

另一种选择是不调用回调函数直接返回对象。

exports.handler = async (event) => {
   return response = {
            statusCode: 500,
            headers: {"Access-Control-Allow-Origin": "*"},
            body: JSON.stringify({
                errorMessage: "This is a custom internal server error"
            })
        };
};

为什么?我的猜测是,仅当您自定义Gateway API的响应时,才评估回调的第一个参数。换句话说,当您没有与lambda进行代理集成时。

但我不确定100%。也许有人可以给出更好的解释。