gpt4 book ai didi

javascript - 在 Node 和 Express 制作的 REST API 上管理分页和搜索/过滤器的正确方法

转载 作者:行者123 更新时间:2023-11-30 06:53:23 25 4
gpt4 key购买 nike

我正在玩弄 Node 和 Express。我当前的问题不是“如何做事”,因为我的分页和过滤/搜索在我从头开始制作并正在玩的“迷你 API”中工作。我的问题更多是关于做事的“良好做法”和“正确方法”。

我将在下面放一些代码片段,我相信这会引起一些批评。 API是基于内存的,不涉及数据库。我有一组硬编码用户,我从中提取数据并向其中推送数据。

下面是我的代码(如您所见,我还使用护照实现了基本身份验证):

//This array contains all my user data...
var users = [
{
"id": "1",
"firstName": "john",
"lastName": "doe"
}
];

//This is the route I have configured in order to retrieve all users.
//I am retrieving the users with the getUsers() function and then returning it.
//in the response object.

router.get('/users', passport.authenticate('basic', { session: false }),
function(req, res, next) {
var result = users.getUsers(req);
res.status(200).json({ users: result });
});


//This method will get the page and items parameters and will try to parse
//them. After that, it will call the search function that will filter the data
//Finally, I am passing the result array, page param and items param to the
//sliceUsers() function that will take care of slicing the result array depending
//on the values of page and items.
exports.getUsers = function(req) {
console.log(req.query);
var page = req.query.page;
items = req.query.items;
page = page !== 'undefined' ? parseInt(page, 10) : undefined;
items = items !== 'undefined' ? parseInt(items, 10) : undefined;

//The search method will filter the data
var searchResults = exports.search(req.query);
//Then, I call sliceUsers(), passing the filtered data, page and items parameters
return exports.sliceUsers(searchResults , page, items);
}


//This method will slice the array to return the page and # of items specified
//The "data" array that is passed as the first parameters is the array that contains
//the data that have already been filtered.
exports.sliceUsers= function(data, page, items) {
page = (page < 1 ? 1 : page) || 1;
items = (items < 1 ? 5 : items) || 5;
console.log('page', page, 'items', items);
var indexStart, indexEnd;
indexStart = (page - 1) * items;
indexEnd = indexStart + items;
return data.slice(indexStart, indexEnd);
};


//Those 2 methods take care of filtering
exports.search = function(query) {
return users.filter(search(query));
}

function search(query) {
console.log('search function');
return function(element) {
for(var i in query) {
//Please note here how I am checking the the parameter I am currently
//checking is NOT 'page' nor 'items'
if(query[i] != element[i] && i !== 'page' && i !== 'items') {
return false;
}
}
return true;
}
}

这里出现了几个问题:

  • 我处理过滤器/搜索以及然后处理分页的方式是否正确?
  • 在 search() 函数中,当我遍历 req.query 时,我知道我检查当前参数是否不同于“page”或“items”的方法不是很有效,但我不知道知道我可以做不同的事情。
  • 我的目标是学习 node 和 express 并精通 javascript,为了实现该目标,您建议我接下来做什么?非常感谢任何资源,因为我在 API 上发现的唯一内容是基本操作,并不真正处理搜索/过滤。当我找到这些时,除了寻呼之外,它永远不会。我从来没有找到一个完整的例子。
  • 我听说下划线可以帮助我进行过滤,但是再一次,没有真正找到任何好的例子,任何地方的任何片段?
  • 任何评论家都非常感激。

P.S:对于这个问题中的任何语法错误,我提前道歉。

最佳答案

有一个名为 OData 的标准,用于过滤、搜索、选择,当然还有 REST。目前使用它的选项很少。对于 Node 后端部分,它是 Node 数据。有关更多信息,请参见此处:http://www.odata.org/libraries/

关于javascript - 在 Node 和 Express 制作的 REST API 上管理分页和搜索/过滤器的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com