后面要定义的文件服务接口可以通过 size 这个查询符传递需要的图像尺寸,这个 size 查询符的值要验证一下是不是有效的值,比如 large,medium 或者 thumbnail。另外接口还需要查询到需要的文件数据。
在终端,项目所在目录下面,执行 nest g class 生成一个类,名字是 serve-file-query.dto ,放在 file/modules/serve/dtos 里面,加上 --flat 选项。再生成一个查询,执行 npm run gq 名字是 get-file ,放在 file/modules/serve/queries 里面,这个查询可以获取文件数据。
ServeFileQueryDto
回到项目,先打开 ServeFileQueryDto,导出一个 enum,名字是 ServeFileQuerySize,添加一个 large 值是 large,再添加一个 medium ,值是 medium,再添加一个 thumbnail ,值是 thumbnail 。
在 ServeFileQueryDto 里面添加一个属性,名字是 size,类型是 ServeFileQuerySize ,上面用 @IsNotEmpty 装饰一下,提供一个选项参数,设置一下错误信息,size 查询符必须有值。上面再用 @IsEnum 装饰一下,规定的 enum 是上面定义的这个 ServeFileQuerySize,一个选项参数,设置一下错误信息, size 查询符的值无效。
GetFileQuery
然后打开 GetFileQuery 这个查询 ,查询参数里需要一个 fileId,类型是 number。再打开这个查询对应的处理器,在构造方法里注入一个依赖,需要一个 Repository,实体类型是 FileEntity,名字是 fileRepository ,然后导入需要的这些东西。
在 execute 方法里面,解构一下查询参数,需要的是 fileId,来自 query.params 。下面声明一个 file,等于 await,执行一下 this.fileRepository.findOne ,提供一个 fileId。
下面判断一下 !file ,如果文件不存在,throw 一个异常,新建一个 NotFoundException ,异常信息是 文件数据不存在。最后可以 return file 。