我们正在使用node-postgres包开发带有 Postgres 数据库的 Node/Express Web 应用程序。我们按照这个问题中的说明进行操作,并以这种方式编写查询:
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
是与数据库结果一起执行的回调函数。
所以以这种方式编写的代码返回了正确的数据,但是(我们认为)它很难看。我们尝试了不同的方式将参数传递到查询中,但这是唯一成功返回数据的格式。
有没有更简洁/更简单的方式来传递我们的参数?(例如,以 node-postgres 将接受的任何方式传递参数,而不必从我的数组 + 非数组元素创建一个额外的数组。)
问这个是因为:
- 也许有更好的方法来使用 node-postgres 包/我们使用不正确,并且
- 如果这是解决此类问题的正确方法,则此代码补充了上述问题中的答案。