在 src/modules/user 里面,添加一个新的 ts 文件,名字是 user.model.ts,这个文件的名字你可以随便定义,这里用的这个 model 指的是数据模型的意思。在这个文件里可以定义一个 GraphQL 的对象类型,其实就是描述一下应用里的一种数据的类型。
在这里我们可以定义一个 User 类型,表示用户。 export 一个 class,名字可以叫做 User。 应用里的用户这种数据里面,有一个 id 属性,它的类型是 string, 还有一个 name 属性,类型也是 string。
要把这个普通的类定义成一个 GraphQL 的对象类型,可以使用 type-graphql 这个包里面提供的几个装饰器。在文件顶部,需要从 type-graphql 这个包里面导入几样东西,先导入一个 ObjectType ,它是一个装饰器。用这个装饰器装饰一下这个类的定义。@ObjectType()
这样就定义了一个 User 类型的 GraphQL 对象。这个类型里面会有一些字段,定义这些字段用的是 @Field 装饰器。在这些属性的上面,用一下 @Field 装饰器装饰一下。
同样,这里这个 name 也是一个字段,在它上面添加一个 @Field() 装饰器。这样我们就定义好了一个 GraphQL 对象类型,名字是 User ,里面有两个字段,一个是 id 还有一个叫 name 。
Resolver
Nest 会根据这个文件自动帮我们生成 GraphQL 的 Schema 。这里还需要一个 resolver 才能自动生成 Schema 。
在命令行下面,用 nest 命令生成一个 resolver ,放在 modules/user 里面。
回到项目,打开刚才生成的 Resolver,你会发现 Resolver 是一个类,这个类要使用 @Resolver 这个装饰器装饰。
另外 Resolver 在 Nest 框架里面也是一种 Provider,在 UserModule 模块里面,已经配置好了这个 UserResolver。
再回到这个 Resolver,这里可以修改一下给它的这个参数,换成一个 User 类,这个 User 就是刚才我们在 user.model.ts 文件里面定义好的一个类。保存一下文件。
打开项目根目录下面的这个 schema.gql 文件,这个文件是我们配置好的自动生成的一个 GraphQL Schema,现在,这里面会多了一个新的类型,叫 User,这个类型里面有两个字段,一个是 id,类型是 String,还有一个是 name,类型也是 String。 字段后面的这个叹号,表示字段是必须的。
字段类型
这个 id 一般我们会用 ID 这种类型,打开 user.model,在 id 这个属性的 @Field 装饰器里面,给它一个函数参数, 让这个函数返回这个字段的类型,这里应该是 ID,这个 ID 来自 type-graphql 这个包。
函数里的这个 type 参数没什么用,你也可以不设置这个参数,直接让函数返回字段的类型就行。 保存一下文件,再回到自动生成的 Schema 文件里面观察一下。这次你会发现,User 这个类型的 id 字段的类型,现在变成了 ID 。