本文基于 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…