我正在通过构建REST API来学习和使用Node和Express。我没有任何DB来存储数据,我在内存中做了所有事情。
我们说我有一系列用户:
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) });
});
所有这一切都运行正常,我已经能够使用Postman测试它并且我的数据正在返回。
我的问题是,如何实现搜索和过滤?
根据我的理解,搜索参数将作为参数传递到URL中,例如:
http://localhost:8080/api/users/firstName=john&age=30
如何使用节点提取这些参数,是否有要使用的特定库或最佳实践?
过滤相同的问题,还是过滤与搜索相同的内容?
答案 0 :(得分:4)
参数将在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
函数中,您可能需要对case,type等做一些事情。