Graphql 如何在nestjs中仅公开prima生成的部分模式

Graphql 如何在nestjs中仅公开prima生成的部分模式,graphql,graphql-js,nestjs,prisma,Graphql,Graphql Js,Nestjs,Prisma,我正在尝试将nestjs与prisma集成。我遵循了nestjs文档中的说明 在我想做一些更改之前,一切都可以正常工作,这样nestjs就不会公开所有的查询/模式 我所做的是 1.更新应用程序模块不允许typePath包含生成的架构 import { Module } from '@nestjs/common'; import { AppController } from 'app/app.controller'; import { AppService } from 'app/app.serv

我正在尝试将nestjs与prisma集成。我遵循了nestjs文档中的说明

在我想做一些更改之前,一切都可以正常工作,这样nestjs就不会公开所有的查询/模式

我所做的是 1.更新应用程序模块不允许typePath包含生成的架构

import { Module } from '@nestjs/common';
import { AppController } from 'app/app.controller';
import { AppService } from 'app/app.service';
import { GraphQLModule } from '@nestjs/graphql';
import { UserModule } from './user/user.module';

@Module({
  imports: [
    GraphQLModule.forRoot({
      typePaths: ['./src/**/*.schema.graphql'],
      debug: true,
      playground: true,
    }),
    UserModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
二,。然后我在
user
文件夹中创建了一个
user.schema.graphql
文件:

#import User from "../prisma/generated/prisma.graphql"

type Query {
  user(id: ID!): User
}
但是,我遇到了一些错误,说我无法导入用户:

(node:36277) UnhandledPromiseRejectionWarning: Error: Type "User" not found in document.
    at ASTDefinitionBuilder._resolveType (/Users/anx/Projects/axesk/gallery-api/node_modules/graphql/utilities/buildASTSchema.js:100:11)
    at ASTDefinitionBuilder.buildType (/Users/anx/Projects/axesk/gallery-api/node_modules/graphql/utilities/buildASTSchema.js:210:79)
    at ASTDefinitionBuilder._buildWrappedType (/Users/anx/Projects/axesk/gallery-api/node_modules/graphql/utilities/buildASTSchema.js:229:17)
    at ASTDefinitionBuilder.buildField (/Users/anx/Projects/axesk/gallery-api/node_modules/graphql/utilities/buildASTSchema.js:249:18)
    at /Users/anx/Projects/axesk/gallery-api/node_modules/graphql/utilities/buildASTSchema.js:332:21
    at /Users/anx/Projects/axesk/gallery-api/node_modules/graphql/jsutils/keyValMap.js:36:31
    at Array.reduce (<anonymous>)
    at keyValMap (/Users/anx/Projects/axesk/gallery-api/node_modules/graphql/jsutils/keyValMap.js:35:15)
    at ASTDefinitionBuilder._makeFieldDefMap (/Users/anx/Projects/axesk/gallery-api/node_modules/graphql/utilities/buildASTSchema.js:329:48)
    at fields (/Users/anx/Projects/axesk/gallery-api/node_modules/graphql/utilities/buildASTSchema.js:312:22)
(node:36277) 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: 2)
(node:36277) [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.
(节点:36277)未处理的PromisejectionWarning:错误:在文档中找不到类型“User”。
在ASTDefinitionBuilder.\u resolveType(/Users/anx/Projects/axesk/gallery api/node\u modules/graphql/utilities/buildASTSchema.js:100:11)
在ASTDefinitionBuilder.buildType(/Users/anx/Projects/axesk/gallery api/node_modules/graphql/utilities/buildASTSchema.js:210:79)
在ASTDefinitionBuilder.\u buildWrappedType(/Users/anx/Projects/axesk/gallery api/node\u modules/graphql/utilities/buildASTSchema.js:229:17)
在ASTDefinitionBuilder.buildField(/Users/anx/Projects/axesk/gallery-api/node_-modules/graphql/utilities/buildASTSchema.js:249:18)
at/Users/anx/Projects/axesk/galleryapi/node_modules/graphql/utilities/buildASTSchema.js:332:21
at/Users/anx/Projects/axesk/galleryapi/node_modules/graphql/jsutils/keyValMap.js:36:31
在Array.reduce()处
在keyValMap(/Users/anx/Projects/axesk/galleryapi/node_modules/graphql/jsutils/keyValMap.js:35:15)
在ASTDefinitionBuilder上创建字段defmap(/Users/anx/Projects/axesk/gallery api/node\u modules/graphql/utilities/buildASTSchema.js:329:48)
at字段(/Users/anx/Projects/axesk/gallery api/node_modules/graphql/utilities/buildASTSchema.js:312:22)
(节点:36277)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:2)
(节点:36277)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

我是nestjs和graphql的新手,请帮助我

我让它以一种黑客的方式工作。。我会将我的解决方案粘贴到这里,以供有相同问题的人使用

例如,我有一个
user.schema.graphql
,它从
prisma.graphql
导入一些类型:

#import User from "../prisma/generated/prisma.graphql"

type Query {
  user(id: ID!): User
}
然后我创建一个
main.schema.graphql
文件,该文件将手动导入项目中的每个模式

#import * from "./user/user.schema.graphql"
最后,只需将此maim模式导入
app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from 'app/app.controller';
import { AppService } from 'app/app.service';
import { GraphQLModule } from '@nestjs/graphql';
import { UserModule } from './user/user.module';
import { importSchema } from 'graphql-import';

@Module({
  imports: [
    GraphQLModule.forRoot({
      resolverValidationOptions: {
        requireResolversForResolveType: false,
      },
      typeDefs: importSchema('./src/main.schema.graphql'),
      debug: true,
      playground: true,
    }),
    UserModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
这样做并不理想。如果graphql导入库可以从文件夹中导入,则会使工作更轻松


或者@nest/graphql库可以使用graphql导入而不是在引擎盖下合并graphql模式来构建typedef,这也很棒。

我让它以某种黑客方式工作。。我会将我的解决方案粘贴到这里,以供有相同问题的人使用

例如,我有一个
user.schema.graphql
,它从
prisma.graphql
导入一些类型:

#import User from "../prisma/generated/prisma.graphql"

type Query {
  user(id: ID!): User
}
然后我创建一个
main.schema.graphql
文件,该文件将手动导入项目中的每个模式

#import * from "./user/user.schema.graphql"
最后,只需将此maim模式导入
app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from 'app/app.controller';
import { AppService } from 'app/app.service';
import { GraphQLModule } from '@nestjs/graphql';
import { UserModule } from './user/user.module';
import { importSchema } from 'graphql-import';

@Module({
  imports: [
    GraphQLModule.forRoot({
      resolverValidationOptions: {
        requireResolversForResolveType: false,
      },
      typeDefs: importSchema('./src/main.schema.graphql'),
      debug: true,
      playground: true,
    }),
    UserModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
这样做并不理想。如果graphql导入库可以从文件夹中导入,则会使工作更轻松

或者@nest/graphql库可以使用graphql导入而不是在引擎盖下合并graphql模式来构建typedef,这也很好