如何解决如何使用 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",
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。