我试着在我的项目中实现typegoose。我正在创建一个nestjs图形服务器,并使用mongoose在我的数据库中推送文档。
我尝试使用typegoose来简化实现新特性的方法,但是我遇到了一个问题,那就是用typegoose转换我的mongoose“模式”。
让我们看看我代码
附加条款
import { buildSchema, getModelForClass, prop } from '@typegoose/typegoose';
export class Ad{
@prop({ required: true })
title: String;
@prop({ required: true })
description: String;
}
export const AdModel = getModelForClass(Ad);
export const AdSchema = buildSchema(Ad);
广告控制器ts
import { Body, Controller, Get, Post } from '@nestjs/common';
import { AdsService } from './ads.service';
import { Ad } from './models/ad';
@Controller('ads')
export class AdsController {
constructor(private readonly adService: AdsService) {}
@Get()
async getAds(): Promise<Ad[] | null> {
return await this.adService.findAll();
}
@Post()
async create(@Body() adDto: Partial<Ad>): Promise<Ad> {
return await this.adService.create(adDto);
}
}
广告服务.ts
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Ad } from './models/ad';
import { ReturnModelType } from '@typegoose/typegoose';
@Injectable()
export class AdsService {
constructor(
@InjectModel(Ad.name)
private readonly adModel: ReturnModelType<typeof Ad>) {}
async create(adDto: Partial<Ad>): Promise <Ad> {
const createdAd = new this.adModel(adDto);
return await createdAd.save();
}
async findAll(): Promise <Ad[]> {
return await this.adModel.find().exec();
}
}
广告模块.ts
import { Module } from '@nestjs/common';
import { AdsService } from './ads.service';
import { MongooseModule } from '@nestjs/mongoose';
import { Ad, AdSchema } from './models/ad';
import { AdsController } from './ads.controller';
@Module({
imports:[MongooseModule.forFeature([{ name: Ad.name, schema: AdSchema }])],
controllers: [AdsController],
providers: [AdsService],
})
export class AdsModule {}
但我得到了这个错误消息:
错误堆栈跟踪
GraphQLError: Type Query must define one or more fields.
at SchemaValidationContext.reportError (/home/olivier/www/other/green/back-end/graphql-server/node_modules/graphql/type/validate.js:90:19)
at validateFields (/home/olivier/www/other/green/back-end/graphql-server/node_modules/graphql/type/validate.js:251:13)
at validateTypes (/home/olivier/www/other/green/back-end/graphql-server/node_modules/graphql/type/validate.js:226:7)
at validateSchema (/home/olivier/www/other/green/back-end/graphql-server/node_modules/graphql/type/validate.js:54:3)
at graphqlImpl (/home/olivier/www/other/green/back-end/graphql-server/node_modules/graphql/graphql.js:79:62)
at /home/olivier/www/other/green/back-end/graphql-server/node_modules/graphql/graphql.js:28:59
at new Promise (<anonymous>)
at Object.graphql (/home/olivier/www/other/green/back-end/graphql-server/node_modules/graphql/graphql.js:26:10)
at Function.<anonymous> (/home/olivier/www/other/green/back-end/graphql-server/node_modules/type-graphql/dist/schema/schema-generator.js:18:52)
at Generator.next (<anonymous>)
at /home/olivier/www/other/green/back-end/graphql-server/node_modules/tslib/tslib.js:110:75
at new Promise (<anonymous>)
at Object.__awaiter (/home/olivier/www/other/green/back-end/graphql-server/node_modules/tslib/tslib.js:106:16)
at Function.generateFromMetadata (/home/olivier/www/other/green/back-end/graphql-server/node_modules/type-graphql/dist/schema/schema-generator.js:15:24)
at /home/olivier/www/other/green/back-end/graphql-server/node_modules/type-graphql/dist/utils/buildSchema.js:11:65
at Generator.next (<anonymous>) {
message: 'Type Query must define one or more fields.'
}
]
(node:1828) UnhandledPromiseRejectionWarning: Error: Generating schema error
at Function.<anonymous> (/home/olivier/www/other/green/back-end/graphql-server/node_modules/type-graphql/dist/schema/schema-generator.js:20:27)
at Generator.next (<anonymous>)
at fulfilled (/home/olivier/www/other/green/back-end/graphql-server/node_modules/tslib/tslib.js:107:62)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
(node:1828) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:1828) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
2条答案
按热度按时间7vux5j2d1#
我猜这和Typegoose无关。你定义了任何Graphql类型或查询吗?如果你在应用模块中添加了
GraphQLModule
,你需要有一个正确的.graphql
文件,该文件至少应该有一个查询类型。ryevplcw2#
我有这个错误,以及与此代码:
固定: