如何解决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文件中,nodeInterface
是undefined
。我进行了搜索,发现我可能需要类型注册表来解决此问题,但是我不明白类型注册表的工作原理和构建方法。它是如何工作的?类型注册表是否可以解决此问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。