问题描述
我开始使用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 (将#修改为@)