打开 RoleService 服务,在这个服务里添加一个可以添加用户角色用的方法,在这个服务类里需要用到 UserRepository,把它作为依赖注入进来。
类里面添加一个 constructor,然后用 @InjectRepository,注入 Role 实体, 下面添加一个属性,private readonly roleRepository,类型是 Repository,Role。
打开 Role 模块.. 在模块里面要导入 TypeOrmModule,imports,导入 TypeOrmModule,用一下 forFeature,把需要的实体交给这个方法,需要的是 Role 实体。
回到 RoleService,添加一个方法,方法的名字叫 store,方法接收一个 data 参数,类型是 RoleDto。
方法 return 的是 await,用一下 this.roleRepository.save,把 data 交给它。
控制器
打开 RoleController 控制器,控制器里需要 roleService 服务,先把它注入进来,添加一个 constructor,在构造方法里添加一个属性,private readonly,roleService,RoleService。
然后定义一条路由。要定义的路由支持 POST 类型的请求,所以需要使用 @Post 装饰器,添加一个对应的处理方法,名字叫 store。
方法需要一个 data 参数,参数用 @Body 装饰一下, data 的类型是 RoleDto。
方法 return 的是 await,this.roleService.store,把请求主体数据交给这个方法。
测试
打开 Http 客户端,创建一个新的请求,名字叫 Role Store, 请求用的方法是 POST,请求的地址是 localhost:3000/roles。
添加一个请求主体数据,类型选择 JSON,在数据里面,可以添加一个 name,它的值就是要创建的角色的名字,比如 admin,再添加一个 alias 设置一下角色的别名,管理员。
发送一下这个请求,返回来一个 404 的响应,这个是因为 RoleController 上设置的路由前缀现在是 role,可以换成 roles。
回到客户端再发送一下这个请求,成功以后回到数据库客户端,打开 role 数据表,现在这里会出现一条数据记录,它的 name 是 admin,alias 是管理员。
下面我们再试着创建一个用户角色,名字是 vip,别名设置成 会员,发送一下这个请求。
提示了一个 500 的内部服务错误,这是因为 role 这个数据表,它的 name 字段的值的类型是 enum,暂时可以使用的值只有 admin。
如果想添加其它名字的用户角色,可以打开 user-role 这个 enum ,在它里面再添加一个 VIP,对应的值可以是 vip。
回到 Http 客户端,重新发送一下这个请求,这回成功的创建了这个用户角色。
再到数据库客户端检查一下,role 这个表里多了一条记录,name 是 vip,alias 是会员。
现在 name 字段可用的值,可以是 admin 也可以是 vip ..
再试着请求一下创建同样的用户角色,又成功创建了一个同样名字的用户角色,回到数据库客户端,删除掉这条记录。
定义 Role 实体的时候可以标记一下 name 字段,让它的值必须是唯一的,把字段的 unique 设置成 true。
然后再试着请求创建同样的用户角色,因为现在应用的数据库要求 role 这个数据表里的 name 字段的值字段是唯一的,所以就不能再创建同样名字的用户角色了。