Анализировать облачный код сервера - обновить ИЛИ создать объект

Я с большим успехом использую Parse Server на AWS и mLab, за исключением своего облачного кода. Основная проблема связана с моим предыдущим кодом для создания ИЛИ обновления объекта. Раньше я делал это, запрашивая указатель пользователя на класс «Избранное». Если строка содержит указатель пользователя, мне нужно обновить ее содержимое, если он не существует, необходимо создать строку.

Старый код 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);
    }
});
});

person Taylorsuk    schedule 18.05.2016    source источник


Ответы (1)


Не отвечайте, если обратный вызов не завершен. Установите response.error для каждой ошибки запроса Parse.

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);
        }
    });
});
person ChunTingLin    schedule 19.05.2016
comment
Я получаю verbose: error: code=101, message=Object not found. verbose: error: code=141, code=101, message=Object not found., хотя в базе данных есть указатель на этого пользователя. - person Taylorsuk; 19.05.2016
comment
Можете ли вы выяснить ошибку: код = 101, сообщение = объект не найден. получить с какой линии? - person ChunTingLin; 19.05.2016
comment
Хорошо, запрос успешен, и ошибка находится в PUT verbose: PUT /parse/classes/Favourites/x3fOMoIOeo { 'user-agent': 'node-XMLHttpRequest, Parse/js1.8.5 (NodeJS 4.1.0)', - person Taylorsuk; 19.05.2016
comment
Исправлено, пришлось сделать это results.save(null, { useMasterKey: true }).then(response.success, response.error); - person Taylorsuk; 19.05.2016