如何创建按特定参数过滤搜索的查询字符串?

Posted

技术标签:

【中文标题】如何创建按特定参数过滤搜索的查询字符串?【英文标题】:How to create a query string filtering the search by specific parameters? 【发布时间】:2019-02-16 08:44:43 【问题描述】:

通常,当我必须使用 NodeJS 和 MongoDB 发出 GET 请求时,我会单独搜索每个字段。

例如:

localhost:3000/movie/:name/:author - GET

正如我期望得到一部电影、想要的名字和作者一样,一切都会好起来的。

但是如果我想进行这样的请求查询怎么办:

localhost:3000/movies/filters[‘movies’]=USA&fields=id,name,author - GET

在 NodeJS 和 MongoDB 中是否可以使用 SAME 查询?

怎么做?

非常感谢!

【问题讨论】:

【参考方案1】:

是的,这是可能的。

在您使用request parameters 的第一条路线中。在第二条路线中,您尝试在路线上使用request queries/movies。 (查询字符串不是路由路径的一部分)

但是你有点不对劲,你可以用这样的字符串查询来做一个 GET 请求:

localhost:3000/movies?filters[movies]=USA&fields[]=id&fields[]=name
                     ^               ^   ^      ^
                     1               2   3      4
    ? 表示查询字符串的开始 = 将键与值分开 & 分隔每个键=值对 []把key当作一个数组来处理

然后您可以使用req.query 属性访问路由器中的值:

router.get('/movies', (req, res) => 
    console.log(req.query.filters.movies); // => USA
    console.log(req.query.fields);         // => [ 'id', 'name' ]
);

要了解更多,建议你阅读官方Express routing guide。

【讨论】:

以上是关于如何创建按特定参数过滤搜索的查询字符串?的主要内容,如果未能解决你的问题,请参考以下文章

弹性搜索 - 按字母字符 A-Z 搜索

在javascript中搜索和替换特定的查询字符串参数值

ElasticSearch搜索实例含高亮显示及搜索的特殊字符过滤

如何使用JsonPayload参数在StackDriver过滤器中创建通知

SQL 过滤器查询

如何按字符串过滤熊猫数据框?