что такое реестр типов в 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,
GraphQLNonNull,
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 nodeInterface
является undefined
. Я искал это и обнаружил, что мне, вероятно, нужен реестр типов для решения этой проблемы, но я не мог понять, как работает реестр типов и как его создать. Как это работает? Можно ли решить эту проблему с помощью реестра типов?