2017-04-07 2 views
1

Der folgende Code funktioniert, wenn das gesamte Schema in einer einzigen Datei ist, aber ich bekomme den obigen Fehler, wenn ich versuche, es in einzelne Dateien zu teilen.Fehler: UserCreatePayload.viewer Feldtyp muss Ausgabetyp sein, aber erhalten: undefined

Ich importiere alle Arten und Funktionen.

Ich muss weitere Details hinzufügen, aber ich bin mir nicht sicher, was ich sagen soll. Ich denke, es ist ein Sequenzierungsproblem, da es in einer einzigen Datei funktioniert, aber nicht aufgeteilt wird.

Vielen Dank.

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' 
    } 
); 
}; 

Import {viewerType, usertype, viewerGet}

+0

Bitte aktualisiere die Frage mit dem Import von viewerType und der viewerType Objecttype –

+0

ich hinzugefügt, um die viewerType und Objekt – James

+0

sie in Module und eine normale 'module.exports' Aufspalten funktioniert gut –

Antwort

0

nicht sicher, ob dies das Problem ist, aber manchmal ein Problem Modul-Ladereihenfolge ist. Wenn es das Problem ist, können Sie es lösen, indem Sie outputFields eine Thunk machen, d. H. Eine Funktion, die das Objekt anstelle eines einfachen Objekts zurückgibt.

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

Ich habe immer noch den gleichen Fehler. Ich werde alles durchgehen und sehen, wo ich noch andere Thunks hinzufügen kann. – James

Verwandte Themen