2017-05-22 1 views
0

J'essaye de pousser ou d'ajouter l'objet json dans mon champ de collection de tableau mais j'obtiens cette erreur "erreur: Erreur générant la réponse ParseError {code: 101, message : 'Objet non trouvé.' } code = 101, message = Objet non trouvé. ".Comment faire pour pousser l'objet JSON dans le champ Array du serveur d'analyse

Je partage mon code de cloud. Parse Server - 2.3.8 Nodejs - 6.10.2 Mongodb - 3.4.

var Offer = new Parse.Query(Parse.Object.extend(GameConstants.OFFER)); 
     Offer.select("collected"); 
     Offer.equalTo(GameConstants.OBJECT_ID, inputData.offer_id); 
     Offer.first({ 
      success: function (offer) { 
       if (typeof offer !== 'undefined') {      
        var collected = offer.get(GameConstants.COLLECTED);      
        collected.push({user_id: inputData.user_id, date_time: new Date()});           
        offer.set(GameConstants.COLLECTED, collected);//{user_id: inputData.user_id, date_time: new Date()} 
        offer.save(null, { 
         success: function (offer) { 
          var GameUser = new Parse.Query(Parse.Object.extend(GameConstants.GAME_USERS)); 
          GameUser.select("coins", "collected_offer"); 
          GameUser.equalTo(GameConstants.OBJECT_ID, inputData.user_id); 
          GameUser.first({ 
           success: function (gameUser) { 
            if (typeof gameUser !== 'undefined') { 
             gameUser.increment(GameConstants.COINS, inputData.coins); 
             gameUser.addUnique(GameConstants.COLLECTED_OFFERS, {offer_id: inputData.offer_id, offer_coins: inputData.coins, date_time: new Date()}); 
             gameUser.save(null, { 
              success: function (gameUser) { 
               callback(null, 1); 
              }, 
              error: function (error) { 
               callback(error); 
              } 
             }); 
            } else { 
             callback(null, 2); 
            } 
           }, 
           error: function (error) { 
            callback(error); 
           } 
          }); 
         }, 
         error: function (error) { 
          callback(error); 
         } 
        }) 
       } else { 
        callback(null, 2); 
       } 
      }, 
      error: function (error) { 
       //Error 
       callback(error); 
      } 
     }); 

S'il vous plaît aidez-moi où je vais mal. Comment puis-je pousser mes objets json personnalisés dans le champ tableau de mongodb en utilisant le serveur d'analyse.

Merci.

Répondre

0

@ julien-kode. Je n'ai pas de réponse complète pour vous (encore) mais j'ai une suggestion qui pourrait aider. Vous utilisez les anciennes fonctions d'erreur de succès de style. Un gros problème avec ce style de codage asynchrone est qu'il est facile pour les erreurs d'être «mangées». Au lieu de cela, vous voulez attraper la fin de la chaîne. Alors, voici une réécriture de votre fonction. J'ai peut-être manqué un peu ici parce que je n'ai pas assez d'informations pour écrire un test de travail, mais j'espère que vous avez l'idée et que nous pouvons passer à la solution.

const Offer = new Parse.Query(Parse.Object.extend(GameConstants.OFFER)) 
    .select("collected"); 
    .equalTo(GameConstants.OBJECT_ID, inputData.offer_id); 
    .first() 
    .then((offer) => { 
    if (typeof offer !== 'undefined') {      
     const collected = offer.get(GameConstants.COLLECTED); // << -- is Array.isArray(collected) === true ????  
     collected.push({ user_id: inputData.user_id, date_time: new Date() });           
     offer.set(GameConstants.COLLECTED, collected); 
     return offer.save(); // <<-- note how i am returning functions that result in promises -- this is the magic! 
    } else { 
     return callback(null, 2); 
    } 
    }) 
    .then((offer) => { 
    return new Parse.Query(Parse.Object.extend(GameConstants.GAME_USERS)) // <-- whoa, we're returning the promise that results from the first() call. cool. 
     .select("coins", "collected_offer"); 
     .equalTo(GameConstants.OBJECT_ID, inputData.user_id); 
     .first() 
    }) 
    .then((gameUser) => { 
    if (typeof gameUser !== 'undefined') { 
     gameUser.increment(GameConstants.COINS, inputData.coins); 
     gameUser.addUnique(GameConstants.COLLECTED_OFFERS, {offer_id: inputData.offer_id, offer_coins: inputData.coins, date_time: new Date()}); 
     return gameUser.save().then(() => callback(null, 1)) // a single line function with no {} will return the result of the expression.... 
    } else { 
     return callback(null, 2); 
    } 
    }) 
    .catch(callback); <-- this is the same as .catch((error) => callback(error));