2015-11-20 142 views
5

我收到以下錯誤。當試圖通過graphiql運行突變時。請幫我解決這個問題或指向一個鏈接,我可以找到反應中繼突變的例子。無法設置屬性'clientMutationId'undefined

mutation { 
    createUser(input: {username: "Hamza Khan", clientMutationId: ""}) { 
    user { 
     id 
     username 
    } 
    } 
} 

{ 
    "data": { 
    "createUser": null 
    }, 
    "errors": [ 
    { 
     "message": "Cannot set property 'clientMutationId' of undefined", 
     "locations": [ 
     { 
      "line": 17, 
      "column": 2 
     } 
     ] 
    } 
    ] 
} 

這裏是突變定義

import { 
    GraphQLString, 
    GraphQLInt, 
    GraphQLFloat, 
    GraphQLList, 
    GraphQLObjectType, 
    GraphQLID, 
    GraphQLNonNull 
} from 'graphql'; 

import { 
    connectionArgs, 
    connectionDefinitions, 
    connectionFromArray, 
    fromGlobalId, 
    globalIdField, 
    mutationWithClientMutationId, 
    nodeDefinitions, 
} from 'graphql-relay'; 

import {User} from './usermodel'; 
import {UserType} from './usertype'; 

export const UserMutations = {}; 
UserMutations.createUser = mutationWithClientMutationId({ 
    name: 'CreateUser', 
    inputFields: { 
    username: {type: new GraphQLNonNull(GraphQLString)} 
    }, 
    outputFields: { 
    user: { 
     type: UserType, 
     resolve: (payload) => { 
     return User.getUserById(payload.userId); 
     } 
    } 
    }, 
    mutateAndGetPayload: (args) => { 
    let newUser = new User({ username: args.username }); 
    newUser.save().then((user) => { 
     return {userId: user.id}; 
    }).error((err) => {return null;}); 
    } 
}); 
+0

錯誤幾乎肯定是因爲您沒有正確加載用戶。可能是因爲你只是發送一個用戶名作爲輸入。 –

+0

我可以控制檯在mutateAndGetPayload中記錄新用戶,但是在outputFields中奇怪的解析函數沒有執行。 – user1762608

+0

它可能是你不查詢用戶。如果您不請求字段,則不會調用輸出字段的解析函數。 –

回答

11

你必須回從mutateAndGetPayload東西 - 你的情況,一個承諾。

mutateAndGetPayload: ({username}) => { 
    const newUser = new User({username}); 
    return newUser.save().then(user => ({userId: user.id})); 
} 
+0

另外,如果出現錯誤,我不確定是否要返回空載荷。您可能想要拋出錯誤,讓錯誤可以通過webstack和中繼傳播,以便客戶端突變可以知道突變失敗。 – steveluscher

+0

在我的情況下,我有第二個承諾,在返回的內。第二個承諾被拒絕。這會導致出現錯誤「Can not set property'clientMutationId'undefined」再次出現。不知道處理它的最好方法是什麼。 – runios

+1

好吧,我的壞。我的代碼中一個愚蠢的錯誤。回報在我的承諾之內。我沒有從主流回來。 – runios