仅更新用户信息中的一列 - MySQL NodeJS

Update only one column in user info - MySQL NodeJS

我正在使用 NodeJS/Express 和 MySQL 构建经典的 CRUD(创建、读取、更新、删除)API。 我创建了一个路径来更新我的用户信息,效果很好。

问题: 如果我不发送所有数据(first_name、last_name 等...),则没有数据的列会更新到 MySQL 数据库中的 undefined,而有数据的列不会'更新。我希望如果我不发送数据,列不会发生变化,只有数据发生变化。

这是我的控制器:

module.exports.updateUser = (req, res, next) => {
    if (req.method == "PUT") {
        let userDetails = `UPDATE users SET first_name = '${req.body.first_name}', last_name = '${req.body.last_name}', user_name = '${req.body.user_name}' WHERE id = ${req.params.id}`;

        sql.query(userDetails, function (err, result) {
            if (!err) {
                res.status(200).json({ message: "User infos updated." })
            } else {
                res.status(401).json({ message: "Error when updating user infos." })
            }
        })
    }
}

因此,如果我对 db 中的现有用户发出 PUT 请求,例如只有邮件:

{
   "mail": "test2@test2.com"
}

我所有的用户数据都变成 null 并且 user.mail 保持不变。

有人可以帮我解决这个问题吗?

谢谢

使用此查询一次更新一个或多个填充的更新

module.exports.updateUser = (req, res, next) => {
        if (req.method == "PUT") {
            let query = '';
            if(req.body.first_name){
               query = `first_name = 
                '${req.body.first_name}'`
            }else
            if(req.body.last_name){
               query = ` last_name = 
                '${req.body.last_name}'`
            }else
            if(req.body.user_name){
               query = `user_name = 
               '${req.body.user_name}'`
            }eles if(req.body.first_name 
                    && req.body.last_name) 
                  {
                    query =`first_name = '${req.body.first_name}',  last_name =    '${req.body.last_name}'`
                  }else if( 
                     req.body.last_name &&  req.body.user_name 
                  {
                    query = `last_name =  '${req.body.last_name}', user_name =   '${req.body.user_name}'`
                  }else if(req.body.first_name
                    && req.body.last_name && req.body.user_name) 
                  {
                    query =`first_name = '${req.body.first_name}', last_name =   '${req.body.last_name, user_name =       '${req.body.user_name}'}'`
                  }
            let userDetails = `UPDATE users SET ${query} WHERE id = ${req.params.id}`;
    
            sql.query(userDetails, function (err, result) {
                if (!err) {
                    res.status(200).json({ message: "User infos updated." })
                } else {
                    res.status(401).json({ message: "Error when updating user infos." })
                }
            })
        }
    }