【问题标题】:Error: UserCreatePayload.viewer field type must be Output Type but got: undefined错误:UserCreatePayload.viewer 字段类型必须是输出类型,但得到:未定义
【发布时间】:2017-09-03 03:40:33
【问题描述】:

当整个架构位于单个文件中时,下面的代码有效,但是当我尝试将其拆分为单个文件时出现上述错误。

我正在导入所有类型和函数。

我必须添加更多细节,但我不知道该说什么。我认为这是一个排序问题,因为它在单个文件中工作,但没有拆分。

非常感谢。

const UserCreateMutation = mutationWithClientMutationId({
  name: 'UserCreate',
  inputFields: {
    email: {type: new GraphQLNonNull(GraphQLString)},
    password: {type: new GraphQLNonNull(GraphQLString)}
  },
  outputFields: {
    viewer: {
      type: viewerType,
      resolve() {
        return viewerGet();
      }
    },
    field: {
      type: userType,
      resolve(node) {
        return node;
      }
    }
  },
  async mutateAndGetPayload({email, password}, {db, req}) {

export const viewerType = new GraphQLObjectType({
  name: 'Viewer',
  fields() {
    return {
      id: globalIdField('Viewer', ({_id: viewerLocalId}) => {
        return viewerLocalId;
      }),
      _id: {type: GraphQLID},
      user: {
        type: userType,
        resolve(parent, args, {req: {user}}) {
          return user || {};
        }
      },
      profile: {
        type: profileConnectionType,
        args: {
          id: {type: GraphQLID},
          searchTerm: {type: GraphQLString},
          ...connectionArgs
        },
        resolve(parent, {id: profileGlobalId, searchTerm, ...connectionArgs}, {db}) {
          const query = (() => {
            const q = {};

            if (profileGlobalId) {
              const {id: profileLocalId} = fromGlobalId(profileGlobalId);

              Object.assign(
                q,
                {_id: new ObjectID(profileLocalId)}
              );
            }

            if (searchTerm) {
              Object.assign(
                q,
                {
                  $text: {
                    $search: `\"${searchTerm}\"`
                  }
                }
              );
            }

            return q;
          })();
          const sort = {_id: -1};
          const limit = 0;

          return connectionFromPromisedArray(
            promisedArrayGet(
              query,
              sort,
              limit,
              profileCollectionName,
              db
            ),
            connectionArgs
          );
        }
      }
    };
  },
  interfaces: [nodeInterface]
});

class Viewer extends Object {}
export const viewerGet = () => {
  return Object.assign(
    new Viewer(),
    {
      _id: 'Viewer'
    }
  );
};

导入 { viewerType, userType, viewerGet }

【问题讨论】:

  • 请通过导入 viewerType 和 viewerType ObjectType 更新问题
  • 我添加了 viewerType 和 Object
  • 将它们分成模块和普通的module.exports 工作正常
  • 我是为 viewerType、viewerGet、userType 和 UserCreateMutation 做的。仍然得到同样的错误。我需要一段时间来重做整个应用程序。你觉得有必要吗?

标签: reactjs graphql relay


【解决方案1】:

不确定这是否是问题,但有时模块加载顺序是一个问题。如果是问题所在,您可以通过将outputFields 设为 thunk 来解决它,即返回对象而不是普通对象的函数。

outputFields: () => ({
  viewer: {
    type: viewerType,
    resolve() {
      return viewerGet();
    }
  },
  field: {
    type: userType,
    resolve(node) {
      return node;
    }
  }
}),

【讨论】:

  • 我仍然遇到同样的错误。我将浏览所有内容,看看我还可以在哪里添加其他 thunk。
猜你喜欢
  • 2016-06-29
  • 2017-12-12
  • 2019-09-19
  • 2017-08-16
  • 2018-06-25
  • 2018-11-18
  • 2018-06-30
  • 2018-03-28
  • 2018-01-30
相关资源
最近更新 更多