【发布时间】:2015-10-12 12:21:42
【问题描述】:
我们正在使用 node-postgres 包开发带有 Postgres 数据库的 Node/Express Web 应用程序。我们按照this question 中的说明进行操作,并以这种方式编写查询:
exports.getByFileNameAndColName = function query(data, cb) {
const values = data.columns.map(function map(item, index) {
return '$' + (index + 2);
});
const params = [];
params.push(data.fileName);
data.columns.forEach(function iterate(element) {
params.push(element);
});
db.query('SELECT * FROM columns ' +
'INNER JOIN files ON columns.files_id = files.fid ' +
'WHERE files.file_name = $1 AND columns.col_name IN (' + values.join(', ') + ')',
params, cb
);
};
data 是一个包含字符串fileName 和列名数组columns 的对象。
我们希望此查询从动态列数的“列”和“文件”表中提取信息。
db.query 以(query, args, cb) 为参数,其中query 是SQL 查询,args 是要传递给查询的参数数组,cb 是与数据库结果一起执行的回调函数。
所以以这种方式编写的代码会返回正确的数据,但是(我们认为)它很难看。我们尝试了不同的方式将参数传递到查询中,但这是唯一成功返回数据的格式。
有没有一种更简洁/更简单的方式来传递我们的参数? (例如,以节点 postgres 将接受的方式传递参数的任何方式,而无需从我的数组 + 非数组元素创建额外的数组。)
问这个是因为:
- 也许有更好的方法来使用 node-postgres 包/我们使用不正确,并且
- 如果这是解决此类问题的正确方法,则此代码补充了上述问题的答案。
【问题讨论】:
标签: node.js postgresql node-postgres