如何解构对象并使用键和值更新 MySQL?
How to destructure an object and update MySQL with keys and values?
我正在将数据从 React 前端传递到 Express 后端:
axios.post('http://localhost/api', {foo: true, bar: false});
在后端,我正在更新一个 MySQL 数据库,例如
app.post("/user", (req, res) => {
const {foo, bar} = req.body;
const sql = `UPDATE users SET foo = ?, bar = ?`;
connection.query(sql, [foo, bar], (err) => {
if (err) {
res.send({err: err});
} else {
res.send({updated: true});
}
})
});
如果我不知道所传递数据的密钥怎么办?就像 foo 和 bar 可以是任何东西。
我需要知道我目前正在 const {foo, bar} = req.body
中解构的密钥。
此外,我需要将它们放在 foo = ?
和 bar = ?
.
中更新字符串的列部分
我想这样做,以便能够使用相同的功能更新数据库中的不同值。
遍历键和值并动态构造 SQL。
app.post("/user", (req, res) => {
let whitelist = ["foo", "bar"];
let checkWhitelist = Object.keys(req.body).filter((e) => whitelist.includes(e)).length > 0;
if (checkWhitelist) {
let assign = Object.keys(req.body).map(k => `\`${k}\` = ?`).join(', ');
let vals = Object.values(req.body);
const sql = `UPDATE users SET ${assign}`;
connection.query(sql, vals, (err) => {
if (err) {
res.send({err: err});
} else {
res.send({updated: true});
}
})
} else {
res.send({err: "Error"});
}
});
请注意,这很危险,因为您信任客户端会发送有效的列名。在现实生活中,您应该将列名列入白名单。
我正在将数据从 React 前端传递到 Express 后端:
axios.post('http://localhost/api', {foo: true, bar: false});
在后端,我正在更新一个 MySQL 数据库,例如
app.post("/user", (req, res) => {
const {foo, bar} = req.body;
const sql = `UPDATE users SET foo = ?, bar = ?`;
connection.query(sql, [foo, bar], (err) => {
if (err) {
res.send({err: err});
} else {
res.send({updated: true});
}
})
});
如果我不知道所传递数据的密钥怎么办?就像 foo 和 bar 可以是任何东西。
我需要知道我目前正在 const {foo, bar} = req.body
中解构的密钥。
此外,我需要将它们放在 foo = ?
和 bar = ?
.
我想这样做,以便能够使用相同的功能更新数据库中的不同值。
遍历键和值并动态构造 SQL。
app.post("/user", (req, res) => {
let whitelist = ["foo", "bar"];
let checkWhitelist = Object.keys(req.body).filter((e) => whitelist.includes(e)).length > 0;
if (checkWhitelist) {
let assign = Object.keys(req.body).map(k => `\`${k}\` = ?`).join(', ');
let vals = Object.values(req.body);
const sql = `UPDATE users SET ${assign}`;
connection.query(sql, vals, (err) => {
if (err) {
res.send({err: err});
} else {
res.send({updated: true});
}
})
} else {
res.send({err: "Error"});
}
});
请注意,这很危险,因为您信任客户端会发送有效的列名。在现实生活中,您应该将列名列入白名单。