簡體   English   中英

如何使用Node.js和Express在REST API中實現搜索和過濾

[英]How to implement search and filtering in a REST API with nodejs and express

我正在通過構建REST API學習和使用Node and 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/zh-CN/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功能中,您可能需要處理大小寫,類型等問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM