Как открыть только часть сгенерированной примой схемы в nestjs - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь интегрировать nestjs с призмой. Я следовал учебнику в документе 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 {}

2. Затем я создал файл user.schema.graphql в папке user:

#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.

Я новичок в nestjs и graphql, пожалуйста, помогите!

1 Ответ

0 голосов
/ 30 ноября 2018

Я заставляю его работать каким-то хакерским способом ... Я просто вставлю свое решение здесь для всех, у кого возникла такая же проблема.

Например, у меня есть 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-import может импортировать из папок, это облегчает жизнь.

или библиотека @ nest / graphql может использовать graphql-import вместо merge-graphql-schemas под капотом для создания typeDef, что также будет хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...