Javascript 如何修复错误:键入;额外的;在apollo server中使用graphql多次定义

Javascript 如何修复错误:键入;额外的;在apollo server中使用graphql多次定义,javascript,graphql,apollo,apollo-server,Javascript,Graphql,Apollo,Apollo Server,问题 大家好 我已经定义了两个在技术上具有相同类型的模式,但出现以下错误: 错误:已多次定义类型“Extra”。 有没有办法解决这个问题 很抱歉,阿波罗对我来说是新生事物,我非常感谢你的帮助来解决这个问题。提前谢谢 模式#1 const {gql} = require('apollo-server'); typeDefs = gql ` extend type Query{ search(q: String!): [Content!]! } type Content{

问题

大家好

我已经定义了两个在技术上具有相同类型的模式,但出现以下错误:

错误:已多次定义类型“Extra”。

有没有办法解决这个问题

很抱歉,阿波罗对我来说是新生事物,我非常感谢你的帮助来解决这个问题。提前谢谢

模式#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]由于更改而重新启动。。。
[nodemon]正在启动`node index.js`
C:\Users\C\Desktop\cinemanight graphql\node\u modules\apollo server core\dist\ApolloServer.js:234
抛出新错误(errors.map(Error=>Error.message).join('\n\n'));
^
错误:已多次定义类型“Extra”。
类型“季节列表”定义了多次。
类型“SimilarSeries”定义了多次。
类型“CastMembers”定义了多次。
类型“MembersList”已定义多次。
类型“MembersInfo”已定义多次。
类型“Characters”定义了多次。
类型“Creator”定义了多次。
位于ApolloServer.initSchema(C:\Users\C\Desktop\cinemanight graphql\node\U modules\apollo server core\dist\ApolloServer.js:234:23)
在新的ApolloServerBase(C:\Users\C\Desktop\cinemanight graphql\node\U modules\apollo server core\dist\ApolloServer.js:202:30)
在新的阿波罗服务器上(C:\Users\C\Desktop\cinemanight graphql\node\U modules\apollo server express\dist\ApolloServer.js:59:9)
在新的阿波罗服务器上(C:\Users\C\Desktop\cinemanight graphql\node\u modules\apollo server\dist\index.js:24:9)
反对。(C:\Users\C\Desktop\cinemanight graphql\index.js:4:16)
at模块编译(内部/modules/cjs/loader.js:776:30)
在Object.Module._extensions..js(internal/modules/cjs/loader.js:787:10)
at Module.load(内部/modules/cjs/loader.js:653:32)
在tryModuleLoad(内部/modules/cjs/loader.js:593:12)
at Function.Module._load(内部/modules/cjs/loader.js:585:3)

解决方案

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


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
}