2015-11-20 13 views
5

की संपत्ति 'clientMutationId' सेट नहीं कर सकता है मुझे निम्न त्रुटि मिल रही है। ग्राफिक्यूएल के माध्यम से उत्परिवर्तन चलाने की कोशिश करते समय। कृपया इस समस्या को हल करने में मदद करें या एक लिंक पर इंगित करें जहां मुझे रिले रिले उत्परिवर्तन उदाहरण मिल सकता है।अपरिभाषित

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 में लॉग इन नए उपयोगकर्ता को कंसोल कर सकता हूं लेकिन आउटपुट फ़ील्ड में अजीब तरह से हल करने का कार्य निष्पादित नहीं कर रहा है। – user1762608

+0

हो सकता है कि आप उपयोगकर्ता के लिए पूछताछ नहीं कर रहे हों। यदि आप किसी फ़ील्ड का अनुरोध नहीं करते हैं, तो आउटपुट फ़ील्ड का हल फ़ंक्शन नहीं कहा जाता है। –

उत्तर

11

आप वापसी mutateAndGetPayload से कुछ करना पड़ता है - अपने मामले, एक वादा है।

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

इसके अतिरिक्त, मुझे यकीन नहीं है कि यदि कोई त्रुटि हो तो आप एक शून्य पेलोड वापस करना चाहते हैं। आप शायद फेंकना चाहते हैं ताकि त्रुटि आपके वेबस्टैक के माध्यम से और रिले के बाहर बुलबुला हो सके ताकि क्लाइंट-साइड उत्परिवर्तन पता हो सके कि उत्परिवर्तन विफल हो गया है। – steveluscher

+0

मेरे मामले में मेरे पास एक दूसरा वादा है जो लौटाया गया है। और दूसरा वादा खारिज कर दिया गया है। यह त्रुटि को "संपत्ति सेट नहीं कर सकता" क्लाइंट MutationId 'अपरिभाषित' का कारण बनता है। सुनिश्चित नहीं है कि इसे संभालने का सबसे अच्छा तरीका क्या है। – runios

+1

ठीक है मेरे बुरे। मेरे कोड में एक मूर्खतापूर्ण गलती। वापसी वादे के मेरे 'तो' के भीतर थी। मैं मुख्य प्रवाह से वापस नहीं आ रहा था। – runios

संबंधित मुद्दे