Javascript 使用SQL在pg PROMITE中产生语法错误
我的一个端点中有以下代码:Javascript 使用SQL在pg PROMITE中产生语法错误,javascript,sql,postgresql,express,pg-promise,Javascript,Sql,Postgresql,Express,Pg Promise,我的一个端点中有以下代码: 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.substr
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
是什么,它都是“等于或接近”的。我已经尝试使用slice而不是substring,但没有任何更改。您永远不应该手动连接值,因为它们没有正确转义,并打开代码以接受可能的SQL注入
使用图书馆提供的工具。有关动态对象的更新
,请参见以下内容:
const cs=new pgp.helpers.ColumnSet(req.body.info,{table:'students});
const query=pgp.helpers.update(req.body.info,cs)+
pgp.as.format('WHERE id=${id}RETURNING*',req.body);
db.1(查询)
。然后(数据=>{
res.json({data});
})
.catch(错误=>{
res.status(400).json({error:err.message})
});
您是否尝试过在然后
和捕获
部分中使用console.log来查看哪一个被触发?您决不能像这样手动连接值,这是对查询的严格禁止。您必须使用库提供的格式引擎。@Graham捕获被触发,因为根据请求,我得到了错误对象的400。这将是问题文本中非常有价值的信息。我对这个库还是很陌生,谢谢您的帮助,稍后我会尝试一下。