合并模式后的“GraphQLError:类型中找不到字段:'query_root'”
Posted
技术标签:
【中文标题】合并模式后的“GraphQLError:类型中找不到字段:\'query_root\'”【英文标题】:"GraphQLError: field not found in type: 'query_root'" after merge schema合并模式后的“GraphQLError:类型中找不到字段:'query_root'” 【发布时间】:2019-11-04 06:27:46 【问题描述】:我已经使用 graphql-tools 缝合了两个 graphql 端点。 使用一个端点架构它工作正常,但使用另一个架构它会抛出此错误 “GraphQLError:在类型中找不到字段:'query_root'”。 即使我可以在自省时看到所有架构。
const createRemoteExecutableSchemas = async () =>
let schemas = [];
for (let api of graphqlApis)
const http = http_link.HttpLink(
uri: api.uri,
fetch:fetch
);
const link1 = setContext.setContext((request, previousContext) =>
return
headers:authorization: previousContext.graphqlContext.headers.authorization
).concat(http);
const link2 = setContext.setContext((request, previousContext) => (
headers:
'x-hasura-admin-secret': api.secret
)).concat(http);
const remoteSchema = await gtool.introspectSchema(link2);
const remoteExecutableSchema = gtool.makeRemoteExecutableSchema(
schema: remoteSchema,
link:link1
);
schemas.push(remoteExecutableSchema);
return schemas;
;
const createNewSchema = async () =>
const schemas = await createRemoteExecutableSchemas();
return gtool.mergeSchemas(
schemas:schemas
);
;
const runServer = async () =>
const schema = await createNewSchema();
const server = new ap_server.ApolloServer(
schema:schema,
context: ( req ) =>
return
"headers": req.headers
);
server.listen().then((url) =>
console.log(`Running at $url`);
);
;
```
【问题讨论】:
【参考方案1】:我找到了解决方案。这是因为错误的授权被转发到第二个端点。
【讨论】:
以上是关于合并模式后的“GraphQLError:类型中找不到字段:'query_root'”的主要内容,如果未能解决你的问题,请参考以下文章
从合并两个Map说开去 - foldLeft 和 foldRight 还有模式匹配