javascript - pg-promise,使用带有嵌套对象的命名参数

标签 javascript named-parameters pg-promise

当使用 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/

相关文章:

javascript - 使用两个不同的 Controller 文件时,部分 View ng-click 不起作用

javascript - 使用phonegap将base64字符串保存为图像?

javascript - 数组 数学逻辑 JavaScript

javascript - 如何检查对象数组中是否存在键

node.js - 具有异步/等待的 Node - 如何获取发生错误的特定行?

typescript - 使用 pg-promise 将 SELECT 的结果直接映射到预定义的类

javascript - pg-promise 通过 :name and :csv 插入格式

named-parameters - 我可以将命名参数传递给 Fish 脚本吗?

Scala 属性问题

scala - Scala 如何知道调用什么方法(命名参数)