GraphQL中的类型注册表是什么?如何以及为什么创建一个?

问题描述

我开始使用GraphQL和Relay,但是在将代码拆分到不同文件中时遇到了问题。

我在文件中有一个TodoType:

const {
  GraphQLObjectType,GraphQLString,GraphQLBoolean,GraphQLNonNull,} = require('graphql');
const { globalIdField } = require('graphql-relay');
const { nodeInterface } = require('../node/typeRegister');

const TodoType = new GraphQLObjectType({
  name: 'Todo',interfaces: [nodeInterface],fields: {
    id: globalIdField(),description: {
      type: GraphQLNonNull(GraphQLString),},done: {
      type: GraphQLNonNull(GraphQLBoolean),});

module.exports = TodoType;

用于导出我的nodeInterface和nodeField的文件:

const { nodeDefinitions,fromGlobalId } = require('graphql-relay');
const Todo = require('../todo/TodoModel');
const TodoType = require('../todo/TodoType');

const { nodeField,nodeInterface } = nodeDefinitions(
  async (globalId) => {
    const { type,id } = fromGlobalId(globalId);
    if (type === 'Todo') {
      const todo = await Todo.findById(id);
      return todo;
    }
  },(obj) => {
    console.log(obj.constructor);
    return TodoType;
  }
);

module.exports = {
  nodeField,nodeInterface,};

我的查询如下:

const {
  GraphQLObjectType,GraphQLID,GraphQLList,} = require('graphql');
const { nodeField } = require('../modules/node/typeRegister');
const TodoType = require('../modules/todo/TodoType');
const Todo = require('../modules/todo/TodoModel');

const QueryType = new GraphQLObjectType({
  name: 'Query',fields: {
    todo: {
      args: {
        id: { type: GraphQLNonNull(GraphQLID) },type: TodoType,resolve: async (_,args) => {
        const { id } = fromGlobalId(args.id);
        const todo = await Todo.findById(id);
        return todo;
      },todos: {
      type: new GraphQLNonNull(GraphQLList(TodoType)),resolve: async () => {
        const todos = await Todo.find();
        return todos;
      },node: nodeField,});

module.exports = QueryType;

发生的事情是,在我的TodoType文件中,nodeInterfaceundefined。我进行了搜索,发现我可能需要类型注册表来解决此问题,但是我不明白类型注册表的工作原理和构建方法。它是如何工作的?类型注册表是否可以解决此问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...