如何使用 pg-promise 传递 table 名称和参数
How to pass table names and parameters with pg-promise
我是节点的新手,随后是 pg-promise。我试图在我的 node express 应用程序中实现的是一条路线,它将作为 api 在数据库中的 table 中进行单个字段更新。这必须只是一个将使用 table 名称、列名称、列值和列 ID 值调用的路由,以确定要在 table.
中更新哪一行
这是我迄今为止尝试过的代码,但我似乎无法正确使用:
router.post('/update_db_field', function (req, res, next) {
db.one('update $table~ set $dbcol~=$dbcolval~ where $dbcolid~=$dbcolidval~ returning $colid~', [
req.body.table,
req.body.dbcol,
req.body.dbcolid,
req.body.dbcolval,
req.body.dbcolidval
]).then(function (data) {
console.log(data)
res.send(data)
}).catch(function (error) {
console.log("ERROR:", error.message || error); // print error;
});
})
不幸的是,它抛出以下错误:
ERROR: syntax error at or near "$"
是否还有一种方法可以从 catch()
函数打印查询字符串,以便调试更容易一些?
您混淆了变量格式和命名参数,您的查询应该是:
router.post('/update_db_field', function (req, res, next) {
db.one('UPDATE ${table~} SET ${dbcol~} = ${dbcolval} WHERE ${dbcolid~} = {dbcolidval} RETURNING ${colid~}', req.body, a => a[req.body.dbcolid])
.then(function (dbcolid) {
console.log(dbcold)
res.send(dbcolid)
})
.catch(function (error) {
console.log("ERROR:", error.message || error); // print error;
});
})
尽管您仍然可能会遇到问题,因为传入动态 table + 列意味着您不知道如何将它们转换为正确的类型,例如,您最终可能会得到 dbcolval
作为字符串传入,而它需要是一个整数,然后查询将因此而被拒绝。
请注意,我们添加了可选 a => a[req.body.dbcolid]
,因此它不是使用具有 属性 的对象解析,而是直接使用 属性 值解析。
How can I see the query text printed in console?
var query = pgp.as.format(query, values);
console.log(query);
API: as.format.
我是节点的新手,随后是 pg-promise。我试图在我的 node express 应用程序中实现的是一条路线,它将作为 api 在数据库中的 table 中进行单个字段更新。这必须只是一个将使用 table 名称、列名称、列值和列 ID 值调用的路由,以确定要在 table.
中更新哪一行这是我迄今为止尝试过的代码,但我似乎无法正确使用:
router.post('/update_db_field', function (req, res, next) {
db.one('update $table~ set $dbcol~=$dbcolval~ where $dbcolid~=$dbcolidval~ returning $colid~', [
req.body.table,
req.body.dbcol,
req.body.dbcolid,
req.body.dbcolval,
req.body.dbcolidval
]).then(function (data) {
console.log(data)
res.send(data)
}).catch(function (error) {
console.log("ERROR:", error.message || error); // print error;
});
})
不幸的是,它抛出以下错误:
ERROR: syntax error at or near "$"
是否还有一种方法可以从 catch()
函数打印查询字符串,以便调试更容易一些?
您混淆了变量格式和命名参数,您的查询应该是:
router.post('/update_db_field', function (req, res, next) {
db.one('UPDATE ${table~} SET ${dbcol~} = ${dbcolval} WHERE ${dbcolid~} = {dbcolidval} RETURNING ${colid~}', req.body, a => a[req.body.dbcolid])
.then(function (dbcolid) {
console.log(dbcold)
res.send(dbcolid)
})
.catch(function (error) {
console.log("ERROR:", error.message || error); // print error;
});
})
尽管您仍然可能会遇到问题,因为传入动态 table + 列意味着您不知道如何将它们转换为正确的类型,例如,您最终可能会得到 dbcolval
作为字符串传入,而它需要是一个整数,然后查询将因此而被拒绝。
请注意,我们添加了可选 a => a[req.body.dbcolid]
,因此它不是使用具有 属性 的对象解析,而是直接使用 属性 值解析。
How can I see the query text printed in console?
var query = pgp.as.format(query, values);
console.log(query);
API: as.format.