typescript - 我们如何从 apollo-server 模块传递 ApolloServer 中的数据源和合并的 graphql 模式和解析器?
问题描述
我有一种情况,我有架构,并且解析器位于各种不同的文件中。我已将架构和解析器导入到负责创建 apollo 服务器的 server.js 文件中。目前,我正在导入一组解析器和查询,而 server.js 文件中已经存在另一组查询和解析器。
这是 server.js 文件的内容。
import "graphql-import-node";
import { ApolloServer, gql } from "apollo-server";
import { makeExecutableSchema } from "graphql-tools";
import merge from "lodash/merge";
import GithubFetchHelper from "./github/GithubFetchHelper";
import {
resolvers as GithubResolvers,
typeDefs as GithubTypeDef
} from "./github";
/**
* Error Handler. Provides full stack - remove for production
*/
const books = [
{
title: "Harry Potter and the Chamber of Secrets",
author: "J.K. Rowling"
},
{
title: "Jurassic Park",
author: "Michael Crichton"
}
];
const typeDefs = gql`
# Comments in GraphQL are defined with the hash (#) symbol.
# This "Book" type can be used in other type declarations.
type Book {
title: String
author: String
}
# The "Query" type is the root of all GraphQL queries.
# (A "Mutation" type will be covered later on.)
type Query {
books: [Book]
}
`;
const resolvers = {
Query: {
books: () => books
}
};
// typeDefs: [
// project.typeDefs,
// task.typeDefs,
// search.typeDefs
// ].join(' '),
// resolvers: merge({}, project.resolvers, task.resolvers, search.resolvers),
// context: {
// models: {
// project: project.model,
// task: task.model
// },
// loaders: loaders()
// }
const server = new ApolloServer({
typeDefs: [typeDefs, GithubTypeDef],
resolvers: merge({}, resolvers, GithubResolvers),
dataSources: () => {
return {
gitHubApi: new GithubFetchHelper()
};
}
});
server.listen().then(({ url }) => {
console.log(` Server ready at ${url}`);
});
export default server;
现在,当我运行服务器时,出现以下错误。任何帮助表示赞赏。
Error: Type "Query" was defined more than once.
我的尝试我参考了 apollo 文档以获取数据源以及使用来自 graphql-tools 的 gql 合并多个模式和解析器。但是我没有得到任何 gql 的实现,他们也使用了数据源。
任何帮助表示赞赏。
注意:我对 Graphql 很陌生
解决方案
从代码中,您将 2 个 typedef 作为数组传递,这可能是您收到错误的原因。您需要将架构缝合在一起。看:
推荐阅读
- tensorflow - Tensorflow MobileNetV1 SSD Coco 实现是如何工作的
- python - python scipy FFT的奇怪结果
- machine-learning - 在 CNN 模型中我们如何找到我们使用过的过滤器的初始化值
- java - Android 构建返回“java.lang.NoClassDefFoundError: com/android/tools/lint/LintCliClient”
- ios - 状态栏使用 Capacitor 覆盖 iOS 上的 webview
- accessibility - Microsoft Active Accessibility 和 UI 自动化
- r - 如何为 scale_fill_distiller 设置颜色条
- javascript - 与 jquery 1.12 兼容的数据表?
- embedded-jetty - 嵌入式码头吞吐量
- java - 如何将不同的变量传递给 JUnit5 中的 beforeEach 钩子