如何使用 graphql-tools 从两个源位置加载 GraphQL 模式?

问题描述

我想从不同位置(本地应用程序和通用模块)加载 graphql 模式。我愿意:

export function GraphqlServer(
    resolvers: Record<string,IResolvers>,config?: Config
) {
    const localScheme = '**/*.graphql';
    const commonSchema = join(
        __dirname,'./packages/common/src/graphql/api/**/*.graphql'
    );
    const schema = loadSchemaSync([localScheme,commonSchema],{
        loaders: [new GraphQLFileLoader()]
    });

    const schemaWithResolvers = addResolversToSchema({
        schema,resolvers: {
            ...resolvers,Date,DateTime,JSON
        }
    });

但似乎只加载了第一个位置的模式。我收到一个错误

错误:未知类型“GetExternalConfluencePage”。

在第二个位置的 .graphql 文件中定义。如果我将此文件从第二个位置移动到第一个位置,则它会起作用。

.graphql 文件的内容为:

input GetExternalConfluencePage {
    confluencePageId: String!
}

type ExternalConfluencePage {
    title: String!
    body: String!
}

第一个位置的 .graphql 文件包含:

type Query {
    macro(input: GetMacroInput!): Macro!
    externalConfluencePage(
        input: GetExternalConfluencePage!
    ): ExternalConfluencePage
}

任何提示可能是什么问题?

解决方法

效果很好。

例如

index.ts

import { printSchema } from 'graphql';
import { loadSchemaSync,GraphQLFileLoader } from 'graphql-tools';
import { join } from 'path';

const localScheme = join(__dirname,'./local.graphql');
const commonSchema = join(__dirname,'./common/*.graphql');
const schema = loadSchemaSync([localScheme,commonSchema],{
  loaders: [new GraphQLFileLoader()],});

console.log(printSchema(schema));

common/common.graphql

input GetExternalConfluencePage {
  confluencePageId: String!
}

type ExternalConfluencePage {
  title: String!
  body: String!
}

local.graphql

type Query {
  externalConfluencePage(input: GetExternalConfluencePage!): ExternalConfluencePage
}

将加载的 GraphQL 模式打印到控制台:

input GetExternalConfluencePage {
  confluencePageId: String!
}

type ExternalConfluencePage {
  title: String!
  body: String!
}

type Query {
  externalConfluencePage(input: GetExternalConfluencePage!): ExternalConfluencePage
}

包版本:

"graphql": "^15.4.0","graphql-tools": "^6.2.3",

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...