如何使用nodejs和express在REST API中实现search和过滤

我正在通过构buildREST API来学习和使用Node和Express。 我没有任何数据库来存储数据,我做了一切在内存中。

比方说,我有一个用户数组:

var users = [{"id": "1", "firstName": "John", "lastName": "Doe"}]; 

并定义了一个getAllUser函数:

 exports.getAllUser = function(page, items) { page = (page < 1 ? 1 : page) || 1; items = (items < 1 ? 5 : items) || 5; var indexStart, indexEnd; indexStart = (page - 1) * items; indexEnd = indexStart + items; return users.slice(indexStart, indexEnd); }; 

并定义了一条路线:

 router.get('/users', function(req, res, next) { var page = req.query.page; items = req.query.items; page = page !== 'undefined' ? parseInt(page, 10) : undefined; items = items !== 'undefined' ? parseInt(items, 10) : undefined; res.status(200).json({ users: users.search(page, items) }); }); 

所有这些工作正常,我已经能够用邮差testing,我的数据正在返回。

我的问题是,如何实现search和过滤?

据我所知,search参数将作为参数在URL中传递,例如:

 http://localhost:8080/api/users/firstName=john&age=30 

我将如何提取这些参数与节点,是否有一个特定的lib使用或最佳实践遵循?

同样的问题进行筛选,或筛选相同的东西比search?

参数将在req.query

 { 'firstName': 'john', 'age': '30' } 

您可以使用arr.filter(callback[, thisArg])进行过滤。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

像这样的东西:

 function search(query) { return function(element) { for(var i in query) { if(query[i] != element[i]) { return false; } } return true; } } exports.search = function(query) { return users.filter(search(query)); } 

并在你的路线:

 router.get('/users', function(req, res, next) { return res.json({ users: users.search(req.query) }); }); 

注意:在searchfunction中,您可能需要对案例,types等进行一些操作。