【问题标题】:How to fix Error: Type "Extra" was defined more than once in apollo-server, using graphql如何修复错误:使用 graphql 在 apollo-server 中多次定义类型“Extra”
【发布时间】:2020-01-22 22:14:41
【问题描述】:

问题

各位开发者,

我已经定义了两个在技术上具有相同类型的架构,但我收到以下错误:

 Error: Type "Extra" was defined more than once.

有没有办法解决这个问题?

抱歉,阿波罗对我来说是新的,我非常感谢您帮助解决这个问题。提前致谢!

架构 #1

const {gql} = require('apollo-server');


typeDefs = gql `
  extend type Query{
    search(q: String!): [Content!]!
  }

  type Content{
    id: String!
    title: String!
    sinopsis: String!
    poster: String!
    rating: String!
    year: String!
    extra: [Extra!]! 
  }

  type Extra{ 
    channel: String!
    first_air_date: String!
    last_air_date: String!
    total_seasons: String!
    total_episodes: String
    season_list: [SeasonList!]! 
    cast_members: CastMembers!
    similar_series: [SimilarSeries!]!
  }

  type SeasonList{ 
    season: Int 
    episodes: [String]
  }

  type SimilarSeries{ 
    id: String!
    poster: String!
  }

  type CastMembers{ 
    creator: Creator!
    members_list: [MembersList!]!
  }

  type MembersList{ 
    members_info: [MembersInfo!]!
  }

  type MembersInfo{
    characters: Characters!
  }

  type Characters{
    real_name: String!
    character: String!
  }

  type Creator{
    name: String! 
    poster: String!
  }
`

const resolvers ={
  Query:{
    search: async(_source , {q} , { dataSources}) =>{
      return dataSources.API.search(q)
        .then(doc =>{
          return doc.content
        });
    }
  }
}

module.exports ={
  typeDefs,
  resolvers
}

架构 #2

const {gql} = require('apollo-server');

const typeDefs = gql `
  extend type Query{
    series(page: Int!): [Series!]!
  }

  type Series{ 
    id: String!
    title: String!
    sinopsis: String!
    poster: String!
    rating: String!
    year: String!
    extra: [Extra!]! 
  }

  type Extra{ 
    channel: String!
    first_air_date: String!
    last_air_date: String!
    total_seasons: String!
    total_episodes: String
    season_list: [SeasonList!]! 
    cast_members: CastMembers!
    similar_series: [SimilarSeries!]!
  }

  type SeasonList{ 
    season: Int 
    episodes: [String]
  }

  type SimilarSeries{ 
    id: String!
    poster: String!
  }

  type CastMembers{ 
    creator: Creator!
    members_list: [MembersList!]!
  }

  type MembersList{ 
    members_info: [MembersInfo!]!
  }

  type MembersInfo{
    characters: Characters!
  }

  type Characters{
    real_name: String!
    character: String!
  }

  type Creator{
    name: String! 
    poster: String!
  }
`;

const resolvers ={
  Query:{
    series: async(_source , {page} , { dataSources }) =>{
      return dataSources.API.getAllSeries(page)
        .then(doc =>{
          return doc.series
        });
    }
  }
}

module.exports = {
  typeDefs,
  resolvers
}

问题错误

[nodemon] restarting due to changes...
[nodemon] starting `node index.js`
C:\Users\c\Desktop\cinemanight-graphql\node_modules\apollo-server-core\dist\ApolloServer.js:234
                throw new Error(errors.map(error => error.message).join('\n\n'));
                ^

Error: Type "Extra" was defined more than once.

Type "SeasonList" was defined more than once.

Type "SimilarSeries" was defined more than once.

Type "CastMembers" was defined more than once.

Type "MembersList" was defined more than once.

Type "MembersInfo" was defined more than once.

Type "Characters" was defined more than once.

Type "Creator" was defined more than once.
    at ApolloServer.initSchema (C:\Users\c\Desktop\cinemanight-graphql\node_modules\apollo-server-core\dist\ApolloServer.js:234:23)     
    at new ApolloServerBase (C:\Users\c\Desktop\cinemanight-graphql\node_modules\apollo-server-core\dist\ApolloServer.js:202:30)        
    at new ApolloServer (C:\Users\c\Desktop\cinemanight-graphql\node_modules\apollo-server-express\dist\ApolloServer.js:59:9)
    at new ApolloServer (C:\Users\c\Desktop\cinemanight-graphql\node_modules\apollo-server\dist\index.js:24:9)
    at Object.<anonymous> (C:\Users\c\Desktop\cinemanight-graphql\index.js:4:16)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)

【问题讨论】:

    标签: javascript graphql apollo apollo-server


    【解决方案1】:

    解决方案

    使用接口的概念和在同一文件中定义类型更正了问题。

    
    const resolvers = require('./resolvers.js');
    const {gql} = require('apollo-server');
    
    const typeDefs = gql `
      extend type Query{
        series(page: Int!): [Series!]!
        movies(page: Int!): [Movies!]!
      }
    
      interface MainContent{
        id: String!
        title: String!
        sinopsis: String!
        poster: String!
        rating: String!
        year: String!
      }
    
      type Series implements MainContent {
        id: String!
        title: String!
        sinopsis: String!
        poster: String!
        rating: String!
        year: String!
        extra: [SerieExtra!]!
      }
    
      type Movies implements MainContent{
         id: String!
        title: String!
        sinopsis: String!
        poster: String!
        rating: String!
        year: String!
        extra: [MovieExtra!]!
      }
    
      type SerieExtra {
        channel: String!
        first_air_date: String!
        last_air_date: String!
        total_seasons: String!
        total_episodes: String
        season_list: [SeasonList!] !
        cast_members: CastMembers!
        similar_series: [SimilarSeries!] !
      }
    
      type MovieExtra {
        air_date: String!
        country: String!
        runtime: String!
        rated: String!
        cast_members: CastMembers!
        similar_movies: [SimilarMovies!] !
      }
    
      type SeasonList {
        season: Int
        episodes: [String]
      }
    
      type SimilarSeries {
        id: String!
        poster: String!
      }
    
      type SimilarMovies {
        id: String!
        poster: String!
      }
    
      type CastMembers {
        creator: Creator!
        members_list: [MembersList!] !
      }
    
      type MembersList {
        members_info: [MembersInfo!] !
      }
    
      type MembersInfo {
        characters: Characters!
      }
    
      type Characters {
        real_name: String!
          character: String!
      }
    
      type Creator {
        name: String!
        poster: String!
      }
    `;
    
    
    module.exports = {
      typeDefs,
      resolvers
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 2020-03-01
      • 2022-01-22
      • 2019-03-18
      • 2019-04-03
      • 2021-09-09
      • 2020-09-26
      • 2019-09-29
      • 2021-04-20
      相关资源
      最近更新 更多