javascript node.js knex.js

javascript - ¿Puedo agregar condicionalmente una cláusula where() a mi consulta de knex?



node.js knex.js (3)

Puede almacenar su consulta en una variable, aplicar su cláusula condicional where y luego ejecutarla, así:

router.get(''/questions'', function(req, res) { var query = knex(''questions'') .select(''question'', ''correct'', ''incorrect'') .limit(50); if(req.query.param == some_condition) query.where(''somecolumn'', req.query.param) // <-- only if param exists else query.where(''somecolumn'', req.query.param2) // <-- for instance query.then(function(results) { //query success res.send(results); }) .then(null, function(err) { //query fail res.status(500).send(err); }); });

Quiero agregar una cláusula where() en mi consulta, pero condicionalmente . Específicamente, quiero que se agregue solo si se pasa un parámetro de cadena de consulta específico en la URL. ¿Es esto posible y, de ser así, cómo lo haría?

router.get(''/questions'', function (req, res) { knex(''questions'') .select(''question'', ''correct'', ''incorrect'') .limit(50) .where(''somecolumn'', req.query.param) // <-- only if param exists .then(function (results) { res.send(results); }); });


Puede hacerlo comprobando si su cadena de consulta está presente y ejecutando una consulta diferente.

router.get(''/questions'', function(req, res) { if (req.query.yourQueryString) { // Run your more specific select } else { knex(''questions'').select(''question'', ''correct'', ''incorrect'').limit(50).where( ''somecolumn'', req.query.param) // <-- only if param exists .then(function(results) { res.send(results); }); } } });


Sí. Utilizar modify

Como se aplica a su ejemplo:

router.get(''/questions'', function (req, res) { knex(''questions'') .select(''question'', ''correct'', ''incorrect'') .limit(50) .modify(function(queryBuilder) { if (req.query.param) { queryBuilder.where(''somecolumn'', req.query.param); } }) .then(function (results) { res.send(results); }); });