当使用 pg-promise 的命名参数时,是否可以引用嵌套对象,像下面的例子吗?
var obj = {
name: 'John',
address: {
postcode: 'abc'
}
};
db.query('SELECT * FROM users WHERE postcode=${address.postcode} AND name=${name}', obj);
目前,对嵌套对象的引用未通过值解析,例如${address.postcode}
保持原样,并且不会在查询字符串中替换为 'abc'
。
最佳答案
注意:此答案自 v6.10.0 起不再有效的pg-promise ,开始支持 Nested Named Parameters原生。
问题中提供的代码示例将按原样工作。
仅适用于pg-promise之前v6.10.0
该库仅格式化命名参数,不会评估它们,因此不,您不能这样做,至少不能直接这样做。
但是您可以通过函数使子属性可供查询格式引擎使用:
var obj = {
name: 'John',
address: {
postcode: 'abc'
},
addrCode: a => a.address.postcode // alias for accessing a sub-property
};
然后使用WHERE postcode = ${addrCode}
。
旧的/ES5 语法,通过 this
也可以工作:
var obj = {
name: 'John',
address: {
postcode: 'abc'
},
addrCode: function(/*a*/) {
// a = this (can use both)
return this.address.postcode;
}
};
更新
可以使客户端评估工作,但只能使用 $1, $2, ...
参数:
db.query('... postcode = $1 AND name = $2', [obj.name, obj.address.postcode]);
注意:您不能直接在查询字符串中使用诸如 ${obj.address.postcode}
之类的计算,因为该值不会被正确转义。
关于javascript - pg-promise,使用带有嵌套对象的命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44570261/