2014-09-29 42 views
4

我正在通过构建REST API来学习和使用Node和Express。我没有任何数据库来存储数据,我做了所有内存。如何在REST API中使用nodejs和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) }); 
}); 

所有这一切工作正常,我已经能够用邮差测试它,并且我的数据正在返回。

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

据我了解,搜索参数会在网址作为参数传递,例如:

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

我将如何提取与节点的参数,并且是有使用特定的lib或最佳实践跟随?

同样的问题进行过滤,或过滤相同的东西比搜索?

+0

如何在路由中指定参数? – user269867 2017-07-19 18:46:03

回答

1

参数将在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) }); 
}); 

注意:在search功能,你可能需要做一些事情的情况下,类型等

+0

谢谢!我编辑了我的初始文章,以反映我现在处理分页的方式。我真的缺乏一些很好的练习例子。我正在试图收集如何做到这一点,但是当把时间混合在一起的时候,我有点失落。我应该只是将页面,项目和查询参数一起传递给getAllUser方法? – dukable 2014-09-29 21:25:33

相关问题