我刚刚开始使用mongoose/mongodb和node.js来构建我正在开发的react原生应用的后端。我已经习惯了从节点查询数据库中的文档,但是如何在前端的GET请求(使用fetch)中设置这些“过滤器”呢?
如果用户对列表应用筛选器,以仅返回特定价格的产品,那么如何将筛选器从客户端传递到服务器端,以便节点可以在数据库上进行适当的查询?
同样的问题,如果我只想返回特定字段,而不是返回mongodb文档中的每个字段。如何让后台知道客户端要返回哪些字段?
希望这一切都是有意义的,就像我说的,我对mongo和node都是新手,所以如果我的解释不是最好的,我道歉。
感谢任何能帮上忙的人!
发布于 2021-03-26 18:09:10
您正在寻找的是一种查询语言--一种用于将查询的参数传递给服务器的语法。有几个选项。
一些站点决定只支持简单的查询。在本例中,最简单的查询语言是GET查询字符串。例如,如果您正在构建一个在线商店,您的客户通常需要按名称和类别搜索产品,因此您最终可能会得到URL中支持的两个查询字符串参数,如下所示:
/products?category=clothes&search=t-shirt
然后,您的应用程序必须独立处理这些参数-您的后端必须知道如何将其转换为MongoDB查询。例如:
products.find({
category: { $eq: req.query.category },
$text: { $search: req.query.search }
// similarly, you could accept params such as "pricemin" and "pricemax"
// and construct a { $gt, $lt } query
});对于需要更高灵活性的更复杂的系统或应用程序,您可以允许客户端自己构造一个完整的查询,并将其传递给后端进行评估。有多种解决方案可以让您实现这一点- GraphQL是最近流行的选择,因为它具有良好的工具支持和易用性。另一个众所周知的解决方案是OData,它用在一些备受瞩目的API中,比如Microsoft Graph API。
如果使用高级查询语言,您的后端将始终需要在发送到服务器的格式和数据库所使用的格式之间进行转换。最简单的非通用示例是上面的代码片段-尽管电池包含的解决方案通常会有自己的转换器,所以如果存在为您做这件事的包,您可能不需要自己编写任何代码。
https://stackoverflow.com/questions/66813919
复制相似问题