用户登录

在 CommentService 里面添加一个存储内容评论用的方法,方法需要用到 CommentRepository,在类里添加一个构造方法,@InjectRepository,注入 Comment ,添加一个属性,private readonly commentRepository,类型是 Repository,Comment。

打开 Comment 模块,在模块的导入里,需要导入 TypeOrmModule,用一下 forFeature,把需要的 Comment 实体告诉这个方法。

回到 CommentService,添加一个方法,名字叫 storePostComment,方法需要几个参数,一个 id,类型是 number,这个 id 应该是内容的 id 号,还需要一个 user,类型是 User 实体,还有一个 data 参数,类型是 CommentDto,这个 data 里面的东西就是评论的内容。

方法 return 的是 await 用一下 this.commentRepository,save,给它一个对象,需要 user,再把 data 里的东西解构出来放到这个对象里,然后添加一个 post,给它一个对象,里面添加一个 id。

这里的 user 还有 post 都是我们在 Comment 实体里定义的关系的名字。

控制器

打开 CommentController,在控制器里需要用到 CommentService 提供的服务,先把它注入进来,添加一个 constructor, 一个属性,private readonly,名字是 commentService,类型是 CommentService。

然后在控制器里定义一条路由,用 @Post 装饰器,设置一下地址,posts/:id/comments,给这个控制器添加的前缀可以去掉。

下面再用一下 @UseGuards,使用一个守卫,需要的是 AuthGuard,发布评论内容的时候会验证用户的身份,验证成功在请求里会包含 user 对象。

再用一个拦截器,@UseInterceptors,使用 ClassSerializerInterceptor,它会在响应里去掉 User 里的 password 字段。

跟这条路由添加一个处理方法,名字叫 storePostComment,方法需要几个参数,用 @Param 给它一个 id 参数,用 ParseIntPipe 转换成数字,把值交给 id 参数 ..类型是 number。

再添加一个 @Body 装饰器,参数是 data,类型是 CommentDto,然后用 @User 装饰器,装饰 user 参数,类型是 User 实体,注意这里会有个冲突, 在文件的顶部,修改一下导入进来的 User 实体的名字,as,UserEntity,这样 user 参数的值的类型可以设置成 UserEntity。

方法 return 的是 await,this.commentService.storePostComment,需要 id,user,还有 data。

测试

打开 HTTP 客户端,创建一个新的请求,名字是 Comment Store, 请求用的方法是 POST,地址是 localhost:3000/posts/ 后面加上要评论的内容的 id 号。

回到数据库客户端,打开 post 这个表,可以找一个内容评论一下,比如评论一下这个 静夜思,它的 id 号是 11。

在请求时上内容的 id 号,11,斜线,再加上一个 comments。

请求需要带着主体数据,里面是要发布的评论内容, 添加一个 body 属性,它的值就是评论的正文 ,你也可以添加一个 title 设置一下评论的标题,定义评论实体的时候设置了这个 title 可以为空,所以可以不用设置 title 的值。

发布评论内容需要验证用户的身份,可以先去请求一下登录,请求 Auth Login,用 杜甫 的身份请求登录。

复制一下请求回来的 Token 值,回到 Comment Store 这个请求,在请求里添加一个身份验证,Bearer token,把 Token 值粘贴到这里。

发送一下这个请求,提示了一个 500 的内部错误,这个错误是因为在这个路由上用了 AuthGuard ,使用它的时候没有设置验证的策略,如果打算使用在 AuthModule 里设置的默认的验证策略,需要在这个模块里导入 AuthModule 模块。

再回到 HTTP 客户端,重新发送一下请求,评论发布成功会响应回新发布的这个评论。

回到数据库再检查一下, 打开 comment 数据表,里面会有一条记录,它就是刚才我们新发布的评论,这条记录里的 postId 的值是 11,userId 的值是 7,这个 id 对应的用户应该是杜甫。

存储内容评论《 Nest.js 应用框架:评论 》

统计

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

社会化网络

关于

微信订阅号

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