打开标签模块里的服务,TagService,先在这个服务里定义几个处理标签用的方法,这些方法都会用到 Tag 实体的 Repository ,可以把它注入进来, 在这个服务类里添加一个构造方法,constructor,@InjectRepository,注入 Tag,用它装饰一个属性,private readonly tagRepository,类型是 Repository,Tag。
下面打开 TagModule,在模块里要导入 TypeOrmModule,用一下 forFeature,在这个模块里需要用的实体是 Tag。
回到 TagService。
先添加一个存储标签的方法,名字是 store,方法接收一个 data 参数,类型是 TagDto,方法 return 的是 await this.tagRepository.save,把 data 交给这个方法,可以直接把 data 存储在应用里的 Tag 实体对应的数据表里。
下面再添加一个更新标签用的方法,名字可以叫 update,方法需要一个 id 参数,类型是 number,还需要一个 data 表示要更新的数据,类型是 TagDto。
方法里面,return ,await,this.tagRepository.update,把 id,还有 data 交给它,它会帮我们更新指定 id 的标签数据记录。
然后再添加一个删除标签用的方法,名字叫 destroy,需要一个 id 参数,类型是 number,这个参数的值就是要删除的 tag 记录的 id。
return 的是 await,用一下 this.tagRepository.delete,把 id 的值交给这个方法。
控制器
下面再打开 Tag 里的控制器,TagController,在这个控制器里可以定义一些处理标签用的路由,这个前缀先把它修改成复数形式,把 tag 换成 tags。
控制器里需要刚才我们编辑的 TagService 里提供的服务,所以需要把这个服务作为这个类的依赖注入进来,添加一个 constructor,添加一个属性,private readonly tagService: TagService。
先添加一下支持 POST 方法请求的路由,用 @Post 装饰器装饰一下,处理方法的名字可以叫 store,方法需要请求里的主体数据 ,用 @Body 装饰器装饰一下这个参数,名字叫 data,类型是 TagDto。
return 的是 await,this.tagService.store,把 data 交给它,这个方法处理的是存储新标签的请求。
然后再添加一个更新标签的路由,用 @Put,给这一个 :id 参数,处理的方法的名字叫 update,方法需要地址里的 id 参数的值,用 @Param 装饰, 需要 id,再用 ParseIntPipe 把它转换成数字类型,参数的名字可以叫 id,类型是 number,这个处理方法里面还需要请求里的主体,@Body,装饰 data,类型是 TagDto。
return await,this.tagService.update,把 id 还有 data 交给它。
最后再添加一个删除标签用的路由,用 @Delete 装饰器,路由地址里需要一个 :id 参数,处理的方法的名字叫 destroy,方法需要 id 参数值,用 @Param 装饰,需要 id,用 ParseIntPipe 转换成数字类型的值,把它交给 id 参数,参数的类型是 number。
return 的是 await,this.tagService.destroy,把要删除的标签 id 交给它。
测试
下面到 HTTP 客户端,试一下我们定义的这些处理标签数据的功能,添加一个新的请求,名字是 Tag Store,请求方法用 POST,设置一下请求的地址,localhost:3000/tags。
请求需要主体数据,类型是 JSON,在数据里面添加一个 name ,它的值是标签的名字,输入一个 山。
发送一下这个请求,得到了一个状态是 500 的响应,因为请求里没有包含标签需要的 alias 的值,这个要字段的值默认不能为空,如果你允许这字段的值为空,可以修改一下这个字段的定义,打开 Tag 实体,找到 alias 字段,在这个 Column 的选项参数里面,把 nullable 的值设置成 true,默认它的值是 false,保存一下实体,会同步更新数据表的定义。
回到 HTTP 客户端,重新发送一下这个请求,这回就成功创建了一个标签。
打开数据库客户端,找到 tag 这个表,现在这个表里会出现一条数据记录。
下面再试一下更新标签,复制一下这个 Tag Store 请求 ..修改一下名字,Tag Update。请求的方法设置成 PUT ,地址是 tags 斜线.. 后面加上要更新的标签的 id 号,然后给请求添加一个主体数据,类型是 JSON ,比如我打算设置一下这个标签的别名,所以请求数据里可以添加一个 alias,设置一下对应的值,再发送一下这个请求。
成功以后,回到数据库客户端检查一下,你会发现这条标签记录,它的别名字段现在就有值了。
最后再去请求删除标签, 创建一个请求,名字是 Tag Destroy, 请求的方法要使用 DELETE,请求的地址应该是 tags,斜线.. 然后是要删除的 tag 的 id 号。
请求不需要主体,发送一下这个请求 ,成功以后再回到数据库客户端检查一下,之前我们存储的标签记录现在就已经不见了,