nestjs引入graphql

507 阅读1分钟

本文基于 juejin.cn/post/684490…

graphql

安装

yarn add @nestjs/graphql apollo-server-express graphql-tools graphql type-graphql

目录结构

app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { GraphQLModule } from '@nestjs/graphql';
import { CatsModule } from './cats/cats.module';
import { MongooseModule } from '@nestjs/mongoose';
@Module({
  imports: [GraphQLModule.forRoot({
    //graphql文件检测
    typePaths: ['./**/*.graphql'],
    autoSchemaFile: 'schema.gql',
  }), CatsModule,
  MongooseModule.forRoot('mongodb://localhost/nest')],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule { }

cat.input.ts

import { InputType, Field, Int } from "type-graphql";
@InputType()
export class CatInput {
  @Field()
  readonly name: string;
  @Field(() => Int)
  readonly age: number;
  @Field()
  readonly breed: string;
}

cats.resolver.ts

import { Resolver, Query, Mutation, Args, } from "@nestjs/graphql";
import { CatsService } from "./cats.service";
import { CreateCatDto } from "./dto/create-cat.dto";
import { CatInput } from "./inputs/cat.input";

@Resolver()
export class CatsResolver {
  constructor(
    private readonly catsService: CatsService,
  ) { }

  @Query(() => String)
  async hello() {
    return 'heelo';
  }

  @Query(() => [CreateCatDto])
  async cats() {
    return this.catsService.findAll();
  }

  @Mutation(() => CreateCatDto)
  async create(@Args('input') input: CatInput) {
    return this.catsService.create(input);
  }
}

修改cats.module.ts

import { Module } from '@nestjs/common';
import { CatsService } from './cats.service';
import { CatsController } from './cats.controller';
import { MongooseModule } from '@nestjs/mongoose';
import { CatShema } from './cats.schema';
import { CatsResolver } from './cats.resolver';

@Module({
  //引入CatsResolver
  providers: [CatsService, CatsResolver],
  controllers: [CatsController],
  imports: [MongooseModule.forFeature(
    [{ name: 'Cat', schema: CatShema }],
  )],
})
export class CatsModule { }

修改cats.service.js

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Cat } from './interfaces/cat.interface';
import { Model } from 'mongoose';
import { CreateCatDto } from './dto/create-cat.dto';
import { CatInput } from './inputs/cat.input';

@Injectable()
export class CatsService {
  constructor(@InjectModel('Cat') private readonly catModel: Model<Cat>) {

  }
	//引入CatInput
  async create(createCatDto: CatInput): Promise<Cat> {
    const createdCat = new this.catModel(createCatDto);
    return await createdCat.save();
  }

  async findAll(): Promise<Cat[]> {
    return await this.catModel.find().exec();
  }
}

修改create-cat.dto.ts

import { ObjectType, Field, Int, ID } from "type-graphql";
@ObjectType()
export class CreateCatDto {
  @Field(() => ID)
  id: string;
  @Field()
  readonly name: string;
  @Field(() => Int)
  readonly age: number;
  @Field()
  readonly breed: string;
}

参考链接:www.youtube.com/watch?v=eHn…

源码地址

gitee.com/suxinying/n…