解析服务器云代码 - 更新或创建对象

时间:2016-05-18 19:46:33

标签: node.js parse-platform parse-server

我在AWS和mLab上使用Parse Server取得了巨大成功,除了我的Cloud Code。主要问题是围绕我之前的创建更新对象的代码。我曾经通过在Favorites类上查询用户指针来做到这一点。如果一行包含用户指针,那么我需要更新其内容,如果它不存在则需要创建一行。

旧的Parse.com代码

Parse.Cloud.define("saveFavourites", function(request, response) {

    console.log(request.params.favourites);

    var Favourites = Parse.Object.extend("Favourites");
    var query = new Parse.Query("Favourites");

    query.equalTo('user', request.user);
    query.first({
        success: function(results) {

            console.log(JSON.stringify(results));

            console.log(results)
            if (results === undefined) {


                var favourites = new Favourites();

                favourites.save({
                    user: request.user,
                    favourites: request.params.favourites
                }, {
                    success: function(favourites) {
                        // The object was saved successfully.
                    },
                    error: function(favourites, error) {
                        // The save failed.
                        // error is a Parse.Error with an error code and message.
                    }
                });

            } else {

                results.set("favourites", request.params.favourites);
                results.set("userId", request.user.id);
                results.save();
            }

            response.success(results);
        },
        error: function(error) {
            error.message("favourites lookup failed");
        }
    });
});

新的解析服务器代码

Parse.Cloud.define("saveFavourites", function(request, response) {

console.log('user is : ' + JSON.stringify(request.user));

var Favourites = Parse.Object.extend("Favourites");
var query = new Parse.Query("Favourites");

query.equalTo("user", request.user);
query.first({
    useMasterKey: true
}, {
    success: function(results) {

        if (results && results.length > 0) {

            console.log('running found');
            favourites.set("favourites", request.params.favourites);
            favourites.set("userId", request.user.id);
            favourites.save();
            response.success();

        } else {

            var favourites = new Favourites();

            favourites.set("user", request.user);
            favourites.set("favourites", request.params.favourites);
            favourites.set("userId", request.user.id);
            favourites.save();
            response.success();
        }
    },
    error: function(error) {
        console.log(error.message);
    }
});
});

1 个答案:

答案 0 :(得分:1)

除非回调完成,否则不要回复。在每个Parse请求错误上设置response.error。

Parse.Cloud.define("saveFavourites", function(request, response) {

    console.log(request.params.favourites);

    var Favourites = Parse.Object.extend("Favourites");
    var query = new Parse.Query("Favourites");

    query.equalTo('user', request.user);
    query.first({
        //is this query need masterKey?
        useMasterKey: true,
        success: function(results) {

            console.log(JSON.stringify(results));

            console.log(results)
            if (results === undefined) {


                var favourites = new Favourites();

                favourites.save({
                    user: request.user,
                    favourites: request.params.favourites
                }, {
                    success: function(favourites) {
                        // The object was saved successfully.
                        response.success(results);
                    },
                    error: function(favourites, error) {
                        // The save failed.
                        // error is a Parse.Error with an error code and message.
                        response.error(error);
                    }
                });

            } else {

                results.set("favourites", request.params.favourites);
                results.set("userId", request.user.id);
                results.save(null, { useMasterKey: true }).then(response.success, response.error);
            }


        },
        error: function(error) {
            error.message("favourites lookup failed");
            response.error(error);
        }
    });
});