我正在尝试在我的数组字段集合中推送或附加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对象。
感谢。
答案 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));