未使用NestJS更新GraphQL模式(代码优先方法)

未使用NestJS更新GraphQL模式(代码优先方法),graphql,nestjs,Graphql,Nestjs,对于GraphQL来说,我还很陌生,我在最新版本的NestJS中遇到了一个问题,我正在尝试向解析器添加一个变种,当服务器运行时,这个变种不会出现在操场上 看起来GraphQL架构在服务器启动时没有更新 createUser变体显示在GraphQL游乐场中并正在工作,但getUsers变体(为测试目的创建)未显示 如能就如何解决这一问题提供任何提示,我将不胜感激 在app.module中导入GraphQLMOdule import { Module } from '@nestjs/common';

对于GraphQL来说,我还很陌生,我在最新版本的NestJS中遇到了一个问题,我正在尝试向解析器添加一个变种,当服务器运行时,这个变种不会出现在操场上

看起来GraphQL架构在服务器启动时没有更新

createUser变体显示在GraphQL游乐场中并正在工作,但getUsers变体(为测试目的创建)未显示

如能就如何解决这一问题提供任何提示,我将不胜感激

在app.module中导入GraphQLMOdule

import { Module } from '@nestjs/common';
// Libraries
import { TypeOrmModule } from '@nestjs/typeorm';
import { GraphQLModule } from '@nestjs/graphql';
// App modules
import { MealModule } from './meal/meal.module';
import { AuthModule } from './auth/auth.module';
// Entities
import { MealEntity } from './meal/meal.entity';
import { UserEntity } from './auth/user.entity';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mongodb',
      url: 'mongodb://localhost/sideproject',
      synchronize: true,
      useUnifiedTopology: true,
      entities: [MealEntity, UserEntity],
    }),
    GraphQLModule.forRoot({
      autoSchemaFile: true,
      debug: true,
      playground: true
    }),
    MealModule,
    AuthModule,
  ],
})
export class AppModule {}

以下是我遇到困难的用户模块的类型:

import { ObjectType, Field, ID } from '@nestjs/graphql';

@ObjectType('User')
export class UserType {
  @Field(() => ID)
  id: string;

  @Field()
  username: string;

  @Field()
  email: string;

  @Field()
  password: string;
}
关联的冲突解决程序:

import { Resolver, Mutation, Args, Query } from '@nestjs/graphql';
import { UserType } from './types/user.types';
import { CreateUserInputType } from './inputs/create-user.input';
import { UserEntity } from './user.entity';
import { AuthService } from './auth.service';

@Resolver(of => UserType)
export class AuthResolver {
  constructor(private authService: AuthService) {}

  @Mutation(returns => UserType)
  signUp(
    @Args('createUserInput') createUserInput: CreateUserInputType,
  ): Promise<UserEntity> {
    return this.authService.signUp(createUserInput);
  }

  @Query(returns => [UserType])
  getUsers(): Promise<UserEntity[]> {
    return this.authService.getUsers()
  }
}
从'@nestjs/graphql'导入{Resolver,Mutation,Args,Query};
从“./types/user.types”导入{UserType};
从“./inputs/create user.input”导入{CreateUserInputType};
从“./user.entity”导入{UserEntity};
从“/auth.service”导入{AuthService};
@解析程序(of=>UserType)
导出类AuthResolver{
构造函数(私有authService:authService){}
@突变(返回=>UserType)
报名(
@Args('createUserInput')createUserInput:CreateUserInputType,
):承诺{
返回此.authService.signUp(createUserInput);
}
@查询(返回=>[UserType])
getUsers():承诺{
返回此.authService.getUsers()
}
}
服务:

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { CreateUserInputType } from './inputs/create-user.input';
import { UserRepository } from './user.repository';
import { UserEntity } from './user.entity';

@Injectable()
export class AuthService {
  constructor(
    @InjectRepository(UserRepository)
    private userRepository: UserRepository,
  ) {}

  signUp(createUserInput: CreateUserInputType): Promise<UserEntity> {
    return this.userRepository.signUp(createUserInput);
  }

  async getUsers(): Promise<UserEntity[]> {
    return await this.userRepository.find();
  }
}
从'@nestjs/common'导入{Injectable};
从'@nestjs/typeorm'导入{InjectRepository};
从“./inputs/create user.input”导入{CreateUserInputType};
从“./user.repository”导入{UserRepository};
从“./user.entity”导入{UserEntity};
@可注射()
导出类身份验证服务{
建造师(
@注入存储库(UserRepository)
私有userRepository:userRepository,
) {}
注册(createUserInput:CreateUserInputType):承诺{
返回this.userRepository.signUp(createUserInput);
}
异步getUsers():承诺{
return wait this.userRepository.find();
}
}
最后是用户模块的存储库:

import { Repository, EntityRepository } from 'typeorm';
import { UserEntity } from './user.entity';
import { InternalServerErrorException } from '@nestjs/common';
import { CreateUserInputType } from './inputs/create-user.input';

import { v4 as uuid } from 'uuid';
import * as bcrypt from 'bcryptjs';

@EntityRepository(UserEntity)
export class UserRepository extends Repository<UserEntity> {
  async signUp(createUserInput: CreateUserInputType): Promise<UserEntity> {
    const { username, email, password } = createUserInput;

    const user = this.create();
    user.id = uuid();
    user.username = username;
    user.email = email;
    user.password = bcrypt.hashSync(password, bcrypt.genSaltSync(12));
    try {
      return await this.save(user);
    } catch (err) {
      console.log(err);
      throw new InternalServerErrorException();
    }
  }
}
从'typeorm'导入{Repository,EntityRepository};
从“./user.entity”导入{UserEntity};
从'@nestjs/common'导入{InternalServerErrorException};
从“./inputs/create user.input”导入{CreateUserInputType};
从“uuid”导入{v4 asuuid};
从“bcryptjs”导入*作为bcrypt;
@EntityRepository(用户实体)
导出类UserRepository扩展存储库{
异步注册(createUserInput:CreateUserInputType):承诺{
const{username,email,password}=createUserInput;
const user=this.create();
user.id=uuid();
user.username=用户名;
user.email=电子邮件;
user.password=bcrypt.hashSync(密码bcrypt.genSaltSync(12));
试一试{
返回等待此。保存(用户);
}捕捉(错误){
控制台日志(err);
抛出新的InternalServerErrorException();
}
}
}

多谢各位

我认为您需要将冲突解决程序添加到提供程序集合中,以使冲突解决程序可用。

尝试删除
schema.gql
文件并重新运行服务器。您在此附加的代码不相关。请在
app.module
中附上GraphQLModule导入代码。谢谢您的回答。我更新了我的第一篇文章,在文章的顶部添加了导入。如您所见,我使用的是{autoSchemaFile:true}选项,因此在启动时没有创建schema.gql文件。这是一个失败的过程,但我尝试重新创建一个项目,并复制粘贴了所有具有完全相同配置的文件,最终成功了。神秘…也是同样的问题,在删除dist文件夹并重新启动项目后,一切都变得正常。不应该发生这样的情况。