首页 > 解决方案 > Node.js:使用数据类型的问题

问题描述

我正在使用 AWS Lambda 在 Node.js 中开发 REST API。

下面是我的代码。我正在尝试从用户那里获取 JSON 输入并将其保存到数据库中。

const mysql = require('mysql2');
const errorCodes = require('source/error-codes');
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.updateUser = (event, context, callback) => {

    context.callbackWaitsForEmptyEventLoop = false;

    if (event.body == null && event.body == undefined) {
        var response = errorCodes.missing_parameters;
        callback(null, response)
    }
    else {
        let body = JSON.parse(event.body)
        console.log("body", body);

        let iduser = body.iduser;;
        let first_name = body.first_name;
        let created_date = body.created_date;

        // allows for using callbacks as finish/error-handlers
        const sql = "UPDATE user SET first_name=? created_date=? WHERE iduser=? ";
        con.execute(sql, [first_name, created_date, iduser ], function (err, result) {
            if (err) {
                console.log(err.toString());

                if (err.toString().indexOf('cannot be null') >= 0) {
                    var response = errorCodes.not_null_parameters;
                    callback(null, response);
                }

                var response = errorCodes.internal_server_error;
                callback(null, response);

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

这是我的 json 输入

{
        "iduser": 3,
        "first_name": "Ranjith",
        "created_date": "2021-07-28 00:00:00",
    }

现在,请注意 myiduser始终是一个数字,first_name是一个字符串,而 thecreated_date是一个日期。

目前,没有数据类型验证。所以我什至可以将文本传递hello给该created_date字段。在那里它不会被保存,但数据库字段将设置为null.

相反,我正在考虑在发送之前验证数据类型。所以我可以将其转换iduser为数字、first_name字符串和date_created日期字段。

我有两个问题。

  1. 这种数据类型验证是 Node.JS 中的一个好习惯吗?我问是因为我是 Java 专家,总有特定的数据类型。
  2. 如果数据类型验证是一件好事,如何将上述数据转换为适当的类型?

标签: javascriptmysqlnode.jsjsoninteger

解决方案


推荐阅读