用户登录

按分类查询内容列表的功能我希望可以再改进一下,让它支持多个分类的查询, 回到项目,打开 PostController,找到 index 方法,这里我们让 index 方法支持一个对象参数,在这个对象参数里面可以包含需要的分类列表。

这个参数值可以用一个装饰器处理一下,在项目的 core,decorators 里面,复制一份之前创建的 user 装饰器 ,修改一下名字,list-options。

再修改一下这个文件里创建的一个参数装饰器, 名字是 ListOptions, 这个装饰器是用 createParamDecorator 创建的,修改一下给它的回调。

可以先从请求的 query 里面解构出来一些东西,暂时只需要一个 categories,这个 req 上的 query 就是请求里的地址查询参数。

判断一下,如果在查询参数里找到了 categories,重新设置一下它的值,用一下字符串上的 split 方法, 按字符串里的小横线,把字符串分割成一个数组。

这个装饰器 return 的是一个对象,把 categories 放进来。

控制器

回到 PostController,找到 index 方法,去掉之前给它添加的这个参数,重新再给它添加一个,这个参数用 @ListOptions 这个装饰器装饰一下,名字叫 options,它的类型可以再处理一下。

在终端,生成一个 interface,nest generate 一个 interface,名字叫 list-options,放在 core/interfaces 里面。

再回到项目,找到刚才创建的接口,core ..interfaces,list-options 。

先修改一下它的名字,后面加上一个 Interface, 在这个接口里面,先添加一个 categories,类型是 string 。

再回到 PostController,这个 options 参数的类型设置成 ListOptionsInterface 。

服务

下面给 postService 的 index 方法的参数现在可以换成 options。

打开 PostService 这个服务,找到在这个服务里定义的 index 方法,这个方法现在支持一个 options 参数,类型是 ListOptionsInterface。

然后在方法里面,先从这个 options 参数里面解构出来一些东西,因为设置了这个参数的类型,所以这里会提示可以使用的一些属性,把 categories 解构出来。

方法里用了 QueryBuilder 查询需要的内容列表, 这里用 where 设置了一个查询条件,这个条件里的等号现在可以换成 IN ,然后把后面的 :categories 参数放在一个括号里, 在这个冒号的后面加上三个点, 意思就是把 where 方法第二个参数里提供的 categories 的值放进来。

现在这个 categories 的值应该是一个数组。

测试

回到 HTTP 客户端试一下,请求内容列表的时候加上一个 categories 查询参数, 先让它等于 landscape。

请求得到的响应就是属于 landscape 这个分类的内容项目,找到了两个结果。

在地址里,可以使用小横线分隔一下不同的分类,再加上一个 emotion, 在这个请求的处理方法里面,用了一个自定义的 ListOptions 装饰器,它会把 categories 这个查询参数的值分割成一个数组。

这次请求得到的响应里面包含了三个内容项目, 这些内容项目就是分类是 landscape,还有 emotion 的内容项目。

查询多个分类的内容列表《 Nest.js 应用框架:分类 》

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点