我的 node.js 服务器上有一个 post 路由,我想在 body 请求上发送一个 json 对象以将其插入到 sql 数据库中。
如果我使用 "INSERT INTO users(UserInfo, BitMask) Values ("value1", 1)"
它可以工作,但如果我尝试像下面的示例那样对对象进行转义,它就不会。
我还尝试了 "INSERT INTO users(UserInfo, BitMask) Values ?", [client],
但它不起作用。
router.post("/add/client", (request, res) => {
let client = {}
client.UserInfo = request.body.name;
client.BitMask = request.body.bitmask;
pool.request().query("INSERT INTO users(UserInfo, BitMask) Values ?" + mysql.escape(client),
(err, result)=>{
if(!err){
return res.json({ success: true, data: result, records_added: result.affected_rows });
}
return res.json({ success: false, data: err });
})
});
此代码返回以下对象:
{
"success": false,
"data": {
"code": "EREQUEST",
"number": 0,
"originalError": {
"sqlstate": "07002",
"code": 0
},
"name": "RequestError"
}
}
有人知道我在这里缺少什么吗? 我在谷歌上找到的答案之一是问题来自于在查询中多次使用占位符,但似乎并非如此。
感谢您的帮助。
最佳答案
使用参数化查询,我也会选择 async
/await
语法以获得更好的可读性
router.post("/add/client", async (request, res) => {
try {
const result = await pool.request()
.input('userInfo', request.body.name)
.input('bitmask', request.body.bitmask)
.query("INSERT INTO users(UserInfo, BitMask) Values (@userInfo, @bitmask)");
return res.json({
success: true,
data: result, // I would avoid this, potential to leak DB info to the client
records_added: result.affected_rows
});
} catch (e) {
// consider returning next(e) here and handling errors somewhere common
return res.json({
success: false,
data: err // don't do this, again potential to leak DB info to the client
});
}
});
关于javascript - 如何使用 Node js在sql db上插入记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441738/