node.js - Filtering mongodb records based on query parameters -
i'm writing rest api in express.js retrieve records mongo database. set of records use standard request:
get localhost:3000/api/books now implement filters i've used express-api-queryhandler. code looks this:
routes.use(queryhandler.filter()); [...] .get((req: any, res: response) => { book.find(req.where, req.fields, req.options, (err: any, orders: any) => { res.status(200).json(books); }); }); so when want retrieve specific element can write e.g.:
get localhost:3000/api/books?name=harry%20potter but best way implement (greater/lower than) gt, gte, lt, lte functions? there libraries node.js? i've found function in loopback documentation ok use loopback express?
i write manually wouldn't nice solution. in advance.
edit: i've edited filter.js file in earlier mentioned package works gt, lt, gte, lte. looks safe maybe there better option more validation?
function filter (query, skip) { var filters = {}; var k; var skip_keys = [ 'fields', 'limit', 'offset', 'sort' ].concat(skip); (k in query) { if (skip_keys.indexof(k) === -1) { var param = query[k]; // added part if(param.startswith("gte_")) param = {"$gte": param.substr(4)} else if(param.startswith("lte_")) param = {"$lte": param.substr(4)} else if(param.startswith("gt_")) param = {"$gt": param.substr(3)} else if(param.startswith("lt_")) param = {"$lt": param.substr(3)} // end of added part console.log(param); filters[k] = param; } } return filters; } module.exports = function (options) { var o = options || {}; return function (req, res, next) { req.where = filter(req.query, o.skip); next(); }; };
Comments
Post a Comment