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

Posted

技术标签:

【中文标题】如何使用 nodejs 和 express 在 REST API 中实现搜索和过滤【英文标题】:How to implement search and filtering in a REST API with nodejs and express 【发布时间】:2014-11-24 08:37:17 【问题描述】:

我正在通过构建 REST 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) );
);

所有这一切都很好,我已经能够使用 Postman 对其进行测试,并且我的数据正在返回。

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

据我了解,搜索参数会作为参数传入URL,例如:

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

如何使用节点提取这些参数,是否有特定的库可供使用或遵循最佳实践?

过滤的问题相同,还是过滤与搜索相同?

【问题讨论】:

如何在路由中指定参数? 【参考方案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 函数中,您可能需要对大小写、类型等进行一些处理。

【讨论】:

谢谢!我已经编辑了我最初的帖子,以反映我现在如何处理分页。我真的缺乏一些好的实践例子。我正在尝试收集如何做到这一点,但是当需要将所有内容混合在一起时,我有点迷失了。我应该将页面、项目和查询参数一起传递给 getAllUser 方法吗?

以上是关于如何使用 nodejs 和 express 在 REST API 中实现搜索和过滤的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NodeJS 和 Express 渲染上传的照片?

如何在使用 NodeJS 和 Express 时创建 MySQL 连接池?

nodejs / express:如何使用数据发布到外部表单?

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

如何使用 nodejs / express 将数据存储在 mongodb 中?

如何使用 nodejs / express 上传和读取文件