如何创建按特定参数过滤搜索的查询字符串?
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。
【讨论】:
以上是关于如何创建按特定参数过滤搜索的查询字符串?的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch搜索实例含高亮显示及搜索的特殊字符过滤