我正在使用 NodeJS/Express 和 MySQL 構建經典的 CRUD(創建、讀取、更新、洗掉)API。我創建了一條路線來更新我的用戶資訊,它作業正常。
問題:
如果我不發送所有資料(first_name、last_name 等),undefinedMySQL 資料庫中沒有資料的列會更新,而有資料的列不會更新。我希望如果我不發送資料,列不會發生任何變化,只有資料會發生變化。
這是我的控制器:
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." })
}
})
}
}
因此,如果我PUT僅使用郵件向 db 中的現有用戶發出請求,例如:
{
"mail": "[email protected]"
}
我所有的用戶資料都變成null并user.mail保持不變。
任何人都可以幫助我嗎?
謝謝??
uj5u.com熱心網友回復:
使用此查詢一次更新一個或多個填充更新
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." })
}
})
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/468125.html
