Ser*_*nko 5 graphql typeorm nestjs
尝试构建 NestJS + GraphQL + TypeORM 后端,但我一直在尝试创建突变和查询。教程人们正是以这种方式解决问题,但我仍然无法理解错误是什么。 错误:无法确定“createUser”的 GraphQL 输出类型。确保您的类使用适当的装饰器进行装饰。 所有的装饰者似乎都没问题。有人有同样的问题吗?
用户模块.ts
import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UsersResolver } from './user.resolver';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './user.entity';
@Module({
imports: [TypeOrmModule.forFeature([User])],
exports:[TypeOrmModule],
providers: [UserService,UsersResolver ],
})
export class UserModule {}
Run Code Online (Sandbox Code Playgroud)
用户实体.ts
import {
Column,
Entity,
OneToMany,
PrimaryGeneratedColumn,
} from 'typeorm';
import { Post } from '../post/post.entity';
import { Comment } from '../comment/comment.entity';
import { Field, ObjectType } from '@nestjs/graphql';
enum RoleEnum {
Admin = 'Admin',
Author = 'Author',
}
@Entity()
@ObjectType()
export class User {
@PrimaryGeneratedColumn('uuid')
@Field()
id: string;
@Column()
@Field()
name: string;
@Column()
@Field()
email: string;
@Column()
@Field()
password: string;
@Column({
type: 'enum',
enum: RoleEnum,
default: RoleEnum.Author,
})
@Field()
role: RoleEnum;
@OneToMany((type) => Post, post => post.user)
@Field(type=>Post)
posts: Post[];
@OneToMany((type) => Comment, comment => comment.author)
@Field(type=>Comment)
comments: Comment[];
}
Run Code Online (Sandbox Code Playgroud)
用户.resolver.ts
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/createuser.dto';
import { userInput } from './input/user.input';
import { User } from './user.entity';
@Resolver((of=>User))
export class UsersResolver {
constructor(private userService: UserService) {
}
@Mutation(()=> [CreateUserDto])
async createUser (@Args('data') data: userInput){
return this.userService.createUser(data)
}
}
Run Code Online (Sandbox Code Playgroud)
用户服务.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './user.entity';
import { Repository } from 'typeorm';
import { CreateUserDto } from './dto/createuser.dto';
@Injectable()
export class UserService {
constructor (@InjectRepository(User) private readonly userRepository: Repository<User>) {}
async createUser (data: CreateUserDto): Promise<User> {
const user = new User()
user.name=data.name
user.email=data.email
user.role=data.role
user.password=data.password
await this.userRepository.save(user)
return user
}
}
Run Code Online (Sandbox Code Playgroud)
创建用户.dto.ts
import { Field, ObjectType } from 'type-graphql';
import { registerEnumType } from '@nestjs/graphql';
enum RoleEnum {
Admin = 'Admin',
Author = 'Author',
}
registerEnumType(RoleEnum, {
name: 'RoleEnum',
});
@ObjectType()
export class CreateUserDto {
@Field() name: string;
@Field() email: string;
@Field() password: string;
@Field(type => RoleEnum) role: RoleEnum;
}
Run Code Online (Sandbox Code Playgroud)
用户输入.ts
import { Field, InputType } from 'type-graphql';
import { registerEnumType } from '@nestjs/graphql';
enum RoleEnum {
Admin = 'Admin',
Author = 'Author',
}
registerEnumType(RoleEnum, {
name: 'RoleEnum',
});
@InputType()
export class userInput {
@Field() name: string;
@Field() email: string;
@Field() password: string;
@Field(type => RoleEnum) role: RoleEnum;
}
Run Code Online (Sandbox Code Playgroud)
我注意到错误的几个可能原因,
1. 用户.resolver.ts
@Mutation()装饰器应该返回类型[User],而不是类型[CreateUserInput]
@Mutation(()=> [User]) // change here
async createUser (@Args('data') data: userInput){
return this.userService.createUser(data)
}
Run Code Online (Sandbox Code Playgroud)
2. 用户输入.ts
如果遇到错误:"Input" cannot be found in the registry,请将@ArgsType()装饰器添加到类中userInput
@InputType()
@ArgsType() //add decorator here
export class userInput {
@Field() name: string;
@Field() email: string;
@Field() password: string;
@Field(type => RoleEnum) role: RoleEnum;
}
Run Code Online (Sandbox Code Playgroud)
注意:我用过 "@nestjs/graphql": "^7.10.3",
| 归档时间: |
|
| 查看次数: |
954 次 |
| 最近记录: |