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

标签 node.js api rest express

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

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

同样的过滤问题,还是过滤和搜索一样?

最佳答案

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

在你的 route :

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

注意:在 search 函数中,您可能需要对大小写、类型等进行一些处理。

关于node.js - 如何使用 nodejs 和 express 在 REST API 中实现搜索和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108594/

相关文章:

node.js - Heroku 抛出类似 "Push rejected, Unauthorized access."的错误

javascript - 如何确保 nodejs 的顺序执行以从查询返回结果?

java - 如何组合这些 Set<?为我的 API 扩展 Vector> 过滤函数?

android - Android API 8-10 中的 ActionBar

java - Android HttpURLConnection setRequestMethod PUT

angularjs - Angular JS 密码学。 pbkdf2 和迭代

javascript - ReactJS 服务器端渲染与热重载 (webpack-dev-server)

javascript - 具有 API 后端数据预加载的单页应用程序

iOS:一个电话有两个请求?

rest - 在 RESTFul API 中,还原/回滚操作的正确 http 动词是什么?