用户登录

现在我需要一个查询出用户投过票的内容列表的接口,打开 UserService,可以添加一个方法,名字可以叫 liked ,它返回的就是指定用户投过票的内容列表。

方法接收一个 id 参数,类型是 number,方法 return 的是,用一下 await,this.userRepository ,findOne,找到指定 id 的用户,然后添加一个 voted 关系,relations,需要的是 voted 关系。

打开 UserController,定义一个路由,使用 @Get,地址可以是 :id/liked ,假设用户投过票的内容就是用户喜欢的内容。

方法的名字叫 liked ,方法接收一个 id 参数,用 @Param 装饰一下,需要 id,它的值用 ParseIntPipe 转换成数字 ,参数的名字叫 id,类型是 number。

方法 return 的是 await,用一下 this.userService 上的 liked,把用户的 id 号交给这个方法。

测试

打开 HTTP 客户端,添加一个请求,名字叫 User Liked ,用的方法是 GET,请求的地址是 localhost:3000,users,用户的 id,再加上一个 liked , 得到的响应就是 id 号是 1 的这个用户,还有它投过票的内容列表。

现在这个 voted 属性里面只有一个项目,再去请求一下 Post Vote ,请求的方法设置成 POST,请求的地址里面 posts 后面的 id 是 2。

这个请求的 token 是为 id 号是 1 的用户签发的,发送这个请求。再回来请求查看 id 号是 1 的这个用户投过票的内容,这回 voted 里面就会多了一个内容项目。

嵌套

注意这些内容项目里面没有 user 属性,user 是在 Post 实体上定义的一个关系,如果需要 Post 里的 user 关系, 可以修改一下 liked 这个方法,在 relations 里面,继续再添加一个 voted.user。

然后回来重新发送一下这个请求,这回内容项目里面就会包含内容的作者相关的数据了。

现在响应回来的内容里面包含用户的 password。

回到项目,打开 UserController,在 liked 方法的上面,使用一个拦截器,用的是 ClassSerializerInterceptor 。

在 User 实体的 password 属性上面用了 @Exclude ,所以这里用了这个拦截器就会在响应里去掉 password。

重新发送一下这个请求,你会发现,响应里现在就不会再包含用户的 password 属性了。

查询内容关系(多对多)《 Nest.js 应用框架:内容关系 》

统计

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

社会化网络

关于

微信订阅号

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