在终端,项目所在目录的下面,先去生成一个新的模块,nest generate 一个 module 放在 modules 里面,名字叫 avatar。用这个模块处理用户头像相关的功能。
再给这个模块生成一个控制器,generate 一个 controller 放在 modules/avatar 里面。 然后再生成一个服务,generate 一个 service,放在 modules/avatar 里面。
回到项目,在 src/modules 里面的 avatar 这个目录里面,再生成一个头像实体,名字是 avatar.entity.ts。
文件里面需要一些来自 typeorm 这个包的东西。
下面再 export 一个 class,名字是 Avatar ,在这个类的上面,再用 @Entity 这个装饰器装饰一下,把它标记成一个实体类。
在这个实体类里面定义一下这个实体上的一些字段,添加一个 id 字段,类型是 number,这个字段的上面用 @PrimaryGeneratedColumn 装饰一下。
下面再添加一个 filename 字段,类型是 string,这个字段存储的是上传以后的文件的名字,字段用 @Column 装饰一下。
然后再添加一个 mimetype,类型是 string,它存储的是文件的类型,字段也需要用 @Column 装饰一下。
下面可以再定义一个关系,关系的名字是 user,类型是一个 User,这是一个多对一的关系,也就是一个用户可以拥有多个头像。关系用 @ManyToOne 装饰一下。
关系关联的 type 是 User,在 User 那里,这个关系对应的是 user.avatar,后面添加一个选项,把 nullable 设置成 false。
定义了这个实体以后,可以在 Avatar 模块里配置一下,在模块的 imports 里面,添加一个 TypeOrmModule,用一下 forFeature ,一个数组,把刚才定义的 Avatar 实体放进来。
用户
打开 User 模块里用的 User 这个 Entity。
在这个用户实体上面也需要定义它跟 Avatar 的关系,关系的名字叫 avatar,类型是一组 Avatar。
关系的上面用 @OneToMany 装饰一下,关联的类型是 Avatar,在 Avatar 那里,这个关系对应的是 avatar.user。
在终端,项目所在目录的下面,执行 npm run start:dev 运行一下项目的开发服务。
打开数据库客户端,定义了 Avatar 实体会在应用的数据库里创建一个叫 avatar 的数据表。 这个表里有几个字段, id,filename,mimetype,还有一个存储头像与用户关系用的 userId 字段,这个字段的值应该是用户的 id 号。