2015-09-06 59 views
1

我有一个使用SORT/PAGE/PER PAGE调用产品的模型,它可以很好地处理数值作为参数而不是字符串。 这工作得很好......以pg Postgres NodeJS作为参数使用LIMIT/ORDER BY

params.limit = 12 
client.query('SELECT * FROM products LIMIT $1', [params.limit], function(err, result) 

尽管如此,这并不...

params.sort = 'product_id' 
params.direction = 'DESC' 
client.query('SELECT * FROM products ORDER BY $1 $2', [params.sort, params.direction], function(err, result)` 

我想这是因为它是包裹字DESC'DESC',但我不知道如何实现这不需要将它直接注入到字符串中。

此外与LIMIT传递一个整数总是工作,但通过ALL我不假设出于同样的原因。

任何帮助将是超级有用!

+1

你不能做到这一点,节点的Postgres是相当有限的,当涉及到查询的格式。然而,[pg-promise](https://github.com/vitaly-t/pg-promise)具有更好的查询格式。在你的例子中,这是一个典型的[原始查询参数注入](https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#raw-text) –

+0

谢谢,我一定会检查这个一出! –

回答

0

我想你可能需要做一个明确的比较:

order by (case when $2 = 'ASC' then $1 end) ASC, 
     (case when $2 = 'DESC' then $1 end) DESC 
+0

这似乎没有按预期工作, –

+0

它是否以任何特定方式失败? –

相关问题