【发布时间】:2021-01-02 18:04:06
【问题描述】:
我的一个端点中有以下代码:
let setText = ''
for (const [ key, value ] of Object.entries(req.body.info)) {
setText = setText.concat(`${key} = ${value}, `)
}
// Last character always an extra comma and whitespace
setText = setText.substring(0, setText.length - 2)
db.one('UPDATE students SET ${setText} WHERE id = ${id} RETURNING *', { setText, id: req.body.id })
.then(data => {
res.json({ data })
})
.catch(err => {
res.status(400).json({'error': err.message})
})
它应该从请求正文中动态生成 SQL。当我记录创建的 SQL 时,它会正确生成。当我直接查询数据库时,它甚至可以工作。但是,每当我运行端点时,无论setText 是什么,我都会收到一个“位于或接近”的语法错误。我试过使用切片而不是子字符串,没有任何变化。
【问题讨论】:
-
您是否尝试过在
then和catch部分中使用console.log 来查看触发了哪个/哪个? -
你绝不能手动连接值,你这样做的方式是严格禁止查询的。您必须使用库提供的格式化引擎。
-
@Graham 正在触发捕获,因为在请求时,我得到 400 和错误对象。
-
在问题文本中可以看到非常有价值的信息。
标签: javascript sql postgresql express pg-promise