【问题标题】:Why my NULL check is always failing in Node.js?为什么我的 NULL 检查在 Node.js 中总是失败?
【发布时间】:2021-10-01 06:20:12
【问题描述】:

我正在使用 AWS Lambda、API Gateway 和 Node.js 开发一个 REST API。

这是我的代码:

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;

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

    
  }
  else{
    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 的参数,然后从数据库中获取数据并作为响应返回。如果未提供id,我将发送错误响应。

但是,在任何情况下,id 为 null 或未提供参数,然后用户将获得标准 AWS 错误输出 "message": "Internal server error"。在控制台中,我需要传递 404 状态码,消息为Missing Parameters。 e 下面的错误被打印出来。

Lambda returned empty body!
Invalid lambda response received: Invalid API Gateway Response Keys: {'trace', 'errorMessage', 'errorType'} in {'errorType': 'TypeError', 'errorMessage': "Cannot destructure property 'id' of 'event.queryStringParameters' as it is null.", 'trace': ["TypeError: Cannot destructure property 'id' of 'event.queryStringParameters' as it is null.", '    at Runtime.exports.getMilestoneStatusByID [as handler] (/var/task/source/milestone-status/milestonestatus-getbyid.js:17:11)', '    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)']}

如何实现null 检查并发送我要查找的错误?

【问题讨论】:

    标签: javascript node.js amazon-web-services aws-lambda aws-api-gateway


    【解决方案1】:

    错误表明event.queryStringParametersundefined,而不是其中的.id。您可以扩展您的检查以同时检查 event.queryStringParameters,但如果这是正常的,您应该检查文档:

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

    【讨论】:

    • 哇,好的。这解决了这个问题。你能告诉我如何发送像JSON 这样的错误,例如{"error":"Missing Parameters"}?现在只是Missing parammeters
    • 您可以简单地将JSON.stringify("Missing Parameters") 替换为JSON.stringify({ error= "Missing Parameters" })
    • 不是。我打错了,= 应该是:。但是您会想到对对象进行字符串化,而不仅仅是字符串。
    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多