Я теперь полностью потратил впустую мой вечер, пытаясь решить этот вопрос, но я не могу ответить, даже после нескольких поисков.
У меня есть сервер, который берет мои папки с файлами .graphql и объединяет ихв один большой, который я передаю вместе с моими преобразователями в makeExecutableSchema (), как показано ниже
const folders = fs.readdirSync(path.join(__dirname, './api'));
const allResolvers = [];
let typeDefs = '';
folders.forEach(folder => {
if (folder !== 'directive') {
typeDefs = typeDefs.concat(requireText(`./api/${folder}/${folder}.graphql`, require));
const { resolver } = require(`./api/${folder}/${folder}.resolvers`);
allResolvers.push(resolver);
}
});
const resolvers = _.merge(allResolvers);
return makeExecutableSchema({typeDefs, resolvers});
Теперь я постоянно получаю сообщение об ошибке
Error: Schema must contain unique named types but contains multiple types named "Address".
at invariant (C:\100hotwater\src\server\node_modules\graphql\jsutils\invariant.js:19:11)
at typeMapReducer (C:\100hotwater\src\server\node_modules\graphql\type\schema.js:216:58)
at Array.reduce (<anonymous>)
at C:\100hotwater\src\server\node_modules\graphql\type\schema.js:237:36
at Array.forEach (<anonymous>)
at typeMapReducer (C:\100hotwater\src\server\node_modules\graphql\type\schema.js:232:51)
at Array.reduce (<anonymous>)
at new GraphQLSchema (C:\100hotwater\src\server\node_modules\graphql\type\schema.js:122:28)
at Object.extendSchema (C:\100hotwater\src\server\node_modules\graphql\utilities\extendSchema.js:161:10)
at buildSchemaFromTypeDefinitions (C:\100hotwater\src\server\node_modules\graphql-tools\dist\schemaGenerator.js:186:28)
at _generateSchema (C:\100hotwater\src\server\node_modules\graphql-tools\dist\schemaGenerator.js:97:18)
at Object.makeExecutableSchema (C:\100hotwater\src\server\node_modules\graphql-tools\dist\schemaGenerator.js:110:20)
at Object.exports.allSchema (C:\100hotwater\src\server\helpers.js:22:28)
at Server.graphQl (C:\100hotwater\src\server\index.js:28:34)
at new Server (C:\100hotwater\src\server\index.js:17:14)
at Object.<anonymous> (C:\100hotwater\src\server\index.js:42:19)
Эта схема наиболее определенноне содержит дубликатов, хотя, как показано ниже, распечатывается непосредственно перед входом в функцию «makeExecutableSchema» () ».
type Lead {
_id: String
owner: User
address: Address
steps: [Step]
}
type Mutation {
createLead(
owner: String!
address: Address
steps: [Step]
): Lead
}
type Address {
lat: Int
lng: Int
formattedAddress: String
}
type Step {
goto: String
key: String
str: String
}
type User {
_id: String
email: String
firstName: String
lastName: String
mobile: Int
phone: Int
billingAddress: String
password: String
leads: [Lead]
}
type Query {
signedInUser: User
userByEmail(email: String!): User # @isAuthenticated
}
extend type Mutation {
signIn(email: String!, password: String!): SignInResponse!
createUser(
email: String!
firstName: String!
lastName: String
mobile: Int
billingAddress: String
password: String
): User
}
type SignInResponse {
token: String
refreshToken: String
}
Я заметил в файле« node_modules \ graphql \ type \ schema.js: 216:58 "Кажется, он дважды просматривает наборы и, очевидно, дважды проверяет адрес при проверке и публикует сообщение об ошибке, но я все еще не уверен, куда идти. Простые ошибки, подобные этой в Graphql, сильно затрудняют любовь.
Любая помощь приветствуется.
Исправление
Короче, благодаря Дану ниже, я определял тип адреса aи использую его как для моего Ввода (Мутация), так и для моего Введения (Запрос - Ведущий).В то время я не понимал, что вам нужно по-разному определять типы и входные данные.Рабочая схема .graphql ниже.
type Lead {
_id: String
owner: User
address: Address
steps: [Step]
}
type Address {
lat: Int
lng: Int
formattedAddress: String
}
type Mutation {
createLead(
owner: String!
address: AddressInput
steps: [Step]
): Lead
}
input AddressInput {
lat: Int
lng: Int
formattedAddress: String
}