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
}