我使用不同的mongodb数据库来存储相同的mongoose模式记录“页面”。正因为如此,我希望有X个graphql端点-每个端点都应该服务于所请求的数据库的“页面”。
示例:localhost:3000/graphql/:database
出于这个原因,我创建了一个从路由(express > request.param.database)获取数据库名称的schemaComposer
import { composeMongoose } from 'graphql-compose-mongoose'
import { SchemaComposer } from 'graphql-compose'
import { Pages } from '../../mongoose/models/PagesModel.js'
import { Projects } from '../../mongoose/models/ProjectsModel.js'
const gqlSchemaComposerBuilder = (database) => {
const gqlSchemaComposer = new SchemaComposer()
const ProjectsTC = composeMongoose(Projects, {})
const PagesTC = composeMongoose(Pages(database), {})
gqlSchemaComposer.Query.addFields({
pageMany: PagesTC.mongooseResolvers.findMany(),
pageOne: PagesTC.mongooseResolvers.findOne(),
projectMany: ProjectsTC.mongooseResolvers.findMany(),
projectOne: ProjectsTC.mongooseResolvers.findOne()
})
gqlSchemaComposer.Mutation.addFields({
projectCreateOne: ProjectsTC.mongooseResolvers.createOne(),
projectUpdateOne: ProjectsTC.mongooseResolvers.updateOne(),
projectRemoveOne: ProjectsTC.mongooseResolvers.removeOne()
})
return gqlSchemaComposer.buildSchema()
}
export default gqlSchemaComposerBuilder
问题是,一旦两个composeMongoose
声明都包装在函数中,我就会得到这个错误:
{"errors":[{"message":"You try to generate GraphQL Type with name Projects from mongoose model but this type already exists in SchemaComposer. Please choose another type name \"composeWithMongoose(model, { name: 'NewTypeName' })\", or reuse existed type \"schemaComposer.getOTC('TypeName')\", or remove type from SchemaComposer before calling composeWithMongoose method \"schemaComposer.delete('TypeName')\"."}]}
发布于 2021-03-05 03:09:21
默认情况下,composeMongoose()
使用全局schemaComposer
,因此需要在componseMongo
的选项中传递gqlSchemaComposer
const gqlSchemaComposer = new SchemaComposer()
const ProjectsTC = composeMongoose(Projects, { schemaComposer: gqlSchemaComposer })
const PagesTC = composeMongoose(Pages(database), {schemaComposer: gqlSchemaComposer})
https://stackoverflow.com/questions/64705265
复制相似问题