如何在解析服务器的Array字段中推送JSON对象

时间:2017-05-22 15:05:34

标签: javascript json parse-platform parse-server cloud-code

我正在尝试在我的数组字段集合中推送或附加json对象但是我收到此错误"错误:生成响应时出错。 ParseError {code:101,message:' Object not found。' } code = 101,message =找不到对象。"。

我正在分享我的云代码。 解析服务器 - 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);
            }
        });

请在我出错的地方帮助我。如何使用解析服务器在mongodb的数组字段中推送自定义json对象。

感谢。

1 个答案:

答案 0 :(得分:0)

@于连-KODE。我还没有给你一个完整的答案,但我有一个可能有帮助的建议。您正在使用旧式成功错误功能。这种异步编码风格存在的一个巨大问题是,很容易让错误被“吃掉”。相反,你想抓住链的末端。所以这里重写了你的功能。我可能在这里错过了一点,因为我没有足够的信息来编写工作测试,但希望你能得到这个想法,我们可以将球推向解决方案吗?

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