用户登录

存储用户投票内容的关系,可以在 Post 模块里面来实现,打开 PostService,在服务里添加一个方法,名字叫 vote,方法接收一个 id 参数,类型是 number ,还需要一个 user 参数,类型是 User 实体,注意这里要导入的是 User 实体,不是我们自定义的 User 装饰器。

这个方法的功能就是保存用户投票内容的关系,await,用一下 this.postRepository,然后用 createQueryBuilder 创建一个 QueryBuilder ,接着可以用 relation 设置一下需要的关系,这个关系就是在 User 实体上的 voted,之前我们已经在 User 实体上定义好了这个 ManyToMany 的关系。

of,给它的值应该是用户实体或者用户的 id ,把 user 参数交给它,然后用 add 添加一个关系,给 add 方法的值可以是 post 实体或者 postID,把 id 参数的值交给这个方法。

路由

然后打开 PostController,继续编辑之前添加的 vote 路由。路由的处理方法需要用到用户,在这个方法的上面先用一个 @UseGuards 添加一个守卫,要用的是 AuthGuard。

然后在 vote 里面,添加一个 @User 装饰器,用它装饰 user 参数,类型是 UserEntity。 return ,await,postService.vote,把 id 还有 user 交给 vote 方法,

测试

在 HTTP 客户端试一下,先做一个登录请求, 请求成功会返回签发的 JWT ,复制一下这个 token 的值。

然后再请求一下 Post Vote,设置一下身份验证,选择 Bearer Token ,把复制的 Token 值粘贴到这里。

再发送一下这个请求, 成功以后,在数据库客户端观察一下,打开 user_voted_post 这个表,你会发现这里已经有了一条记录。

这条记录里面记录的是投票的用户的 id 号,还有这个用户投票的内容的 id 号。

回到 HTTP 客户端,修改一下请求地址,posts/2/vote ,发送一下这个请求,再到数据库客户端检查一下 user_voted_post 表,这里又会多了一条记录,id 号是 1 的用户,给 id 号是 2 的内容投了一票。

存储内容关系(多对多)基于 Query Builder《 Nest.js 应用框架:内容关系 》

统计

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

社会化网络

关于

微信订阅号

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