【发布时间】:2018-10-26 15:15:02
【问题描述】:
我现在完全浪费了我的晚上试图解决这个问题,但即使经过多次搜索,我也无法找到答案。
我有我的服务器,它抓取我的“.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 中这样的简单错误让人很难爱上它。
感谢任何帮助。
修复
简而言之,感谢下面的 Dan,我正在定义地址类型并将其用于我的输入(突变)和输出(查询 - 线索)。我当时没有意识到您需要以不同的方式定义类型和输入。下面的工作 .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
}
【问题讨论】:
标签: typescript graphql apollo