Can I conditionally add a where() clause to my knex query?

javascript, knex.js, node.js

Solution

You can store your query in a variable, apply your conditional where clause and then execute it, like this :

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);
  });
});

Problem

I want to add a `where()` clause in my query, but conditionally. Specifically, I want it added only if a sepecific querystring parameter is passed in the URL. Is this possible, and if so, how would I go about doing it? ``` 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); }); }); ```

Original source