生成typedefs时出错TypeError:无法读取未定义的属性“ some”

问题描述

在Apollo Server中构建Typedef时出现以下错误

return typeDef.deFinitions.some(deFinition => deFinition.kind === language_1.Kind.DIRECTIVE_DEFinitioN &&
                                   ^
TypeError: Cannot read property 'some' of undefined

我尝试从此处https://github.com/apollographql/apollo-server/issues/2961遵循一些解决方案,但仍然出现错误

这是我创建模式的方式:

fs.readdirsync(__dirname)
 .filter(dir => { console.log('dir',dir); return dir.indexOf('.') < 0 })
 .forEach((dir) => {
    const tmp = require(path.join(__dirname,dir)).default;
    resolvers = merge(resolvers,tmp.resolvers);
    typeDefs.push(tmp.types);
 });

const schema = new ApolloServer({
  typeDefs,resolvers,playground: {
    endpoint: '/graphql',settings: {
      'editor.theme': 'light'
    }
  }
});

type.js

const Book = gql`
  type Book {
    title: String!
    author: String!
  }
`;

export const types = () => [Book];

export const typeResolvers = {

};

mutation.js

const Mutation = gql`
  extend type Mutation {
    addBook(book: BookInput): Book
  }
`;

export const mutationTypes = () => [Mutation];

export const mutationResolvers = {
  Mutation: {
    addBook: async (_,args,ctx) => {
      return []
    }
  }
};

index.js

export default {
  types: () => [types,queryTypes,inputTypes,mutationTypes],resolvers: Object.assign(queryResolvers,mutationResolvers,typeResolvers),};

有什么建议吗?我可能会缺少什么?

解决方法

过去2个小时我都遇到了同样的问题。我意识到该文件是我在创建typedef之前实例化我的apollo服务器正在执行的。

对此进行测试的简单方法是在执行console.log(types,queryTypes,inputTypes,mutationTypes)之前先创建一个const schema = new ApolloServer({ ...

其中一个未定义。谢谢。

,

花了一些时间进行更改之后,我终于找到了可行的解决方案。

我必须确保typeDefs是GraphQL文档的数组,而不是[Function: types]的类型。为此,我删除了不必要的函数语法。

例如:

我将此export const types = () => [Book];替换为export const types = Book;

我将此types: () => [types,mutationTypes]替换为types: [types,mutationTypes]

...以及几乎所有我() =>

最后,在实例化ApolloServer之前,我没有将tmp.types推入类型数组,而是使用concat来使用所有已定义的graphql类型,因为我已经定义了当前文件'plus '在每个目录中导入的graphql类型

typeDefs = typeDefs.concat(tmp.types);