Node.js : 如何在 AWS Lambda 中进行错误处理?

Node.js : How to do error handing in AWS Lambda?

我正在使用 AWS Lambda API 网关开发 REST API。语言是 Node.js.

请检查以下代码。我在那里接受一个名为 id 的参数,然后从数据库中获取数据并将 return 作为响应返回。

const mysql = require('mysql2');
const PropertiesReader = require('properties-reader');

const prop = PropertiesReader('properties.properties');

const con = mysql.createConnection({
  host     : prop.get('server.host'),
  user     : prop.get("server.username"),
  password : prop.get("server.password"),
  port     : prop.get("server.port"),
  database : prop.get("server.dbname")
});


exports.getMilestoneStatusByID = (event, context, callback) => {

  const { id } = event.queryStringParameters;
  console.log("id", id);

  // allows for using callbacks as finish/error-handlers
  context.callbackWaitsForEmptyEventLoop = false;
  const sql = "select * from milestone_status where idmilestone_status = ?";
  con.execute(sql, [id], function (err, result) {
    if (err) throw err;

    var response = {
      "statusCode": 200,
      "headers": {
        "Content-Type": "application/json"
      },
      "body": JSON.stringify(result),
      "isBase64Encoded": false
    };
    callback(null, response)
  });
};

但是,在任何情况下 id 为 null 或未提供任何参数,用户都会得到标准的 AWS 错误输出 "message": "Internal server error"。但我需要的是传递 404 状态代码,消息为 Missing Parameters.

我试图将 handler 中的整个块放入 try-catch 中,并尝试在 catch

中触发以下代码
var response = {
      "statusCode": 404,
      "headers": {
        "Content-Type": "application/json"
      },
      "body": JSON.stringify("Missing Parameters"),
      "isBase64Encoded": false
    };
    callback(null, response)

但这些都没有阻止我收到标准的 AWS 错误消息,"message": "Internal server error"

如何实现我正在寻找的错误?

我正在回答我自己的问题。问题不在于返回错误,而在于 null 检查。这有效。

exports.getMilestoneStatusByID =(事件、上下文、回调)=> {

const params = event.queryStringParameters;

if (!params || params.id == null) {
    var response = {
        "statusCode": 404,
        "headers": {
            "Content-Type": "application/json"
        },
        "body": JSON.stringify({ error: "Missing Parameters" }),
        "isBase64Encoded": false
    };
    callback(null, response)
} else {
    const { id } = params;
    // ...
}