简体   繁体   English

您尝试从猫鼬模型生成名称为“Projects”的 GraphQL 类型,但该类型已存在于 SchemaComposer 中

[英]You try to generate GraphQL Type with name "Projects" from mongoose model but this type already exists in SchemaComposer

I use different mongodb db's to store the same mongoose schema records "Pages".我使用不同的 mongodb 数据库来存储相同的猫鼬模式记录“页面”。 Because of that i wanted to have X graphql endpoints - each should serve the "Pages" of the requested database.因此,我希望拥有 X 个 graphql 端点 - 每个端点都应为请求的数据库的“页面”提供服务。

Example: localhost:3000/graphql/:database示例: localhost:3000/graphql/:database

For that reason i created a schemaComposer that gets the database name from a route (express > request.param.database)出于这个原因,我创建了一个 schemaComposer,它从路由中获取数据库名称(express > request.param.database)

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

The Problem is, as soon as the both composeMongoose declarations are wrapped inside the function i get this Error:问题是,只要两个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')\"."}]}

By default composeMongoose() uses the global schemaComposer , so you need to pass your gqlSchemaComposer in the options of componseMongo默认情况下composeMongoose()使用全局schemaComposer ,因此您需要在gqlSchemaComposer的选项中传递您的componseMongo

const gqlSchemaComposer = new SchemaComposer()

const ProjectsTC = composeMongoose(Projects, { schemaComposer: gqlSchemaComposer })
const PagesTC = composeMongoose(Pages(database), {schemaComposer: gqlSchemaComposer})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM