Добавление новых полей в ParseObjects в коде Parse Cloud только для клиентов. без сохранения в БД

Когда я хочу получить ParseObjects (Posts) из parse db (mongo) для отображения в моем приложении для Android, мне нужно добавить новые поля в ParseObject в облачном коде перед доставкой клиенту. эти поля необходимы только для клиента, и поэтому я не хочу сохранять их в облаке / БД. но по какой-то странной причине кажется, что дополнительные поля успешно доставляются клиенту, только если я сохраню их в облаке. как то так будет работать

Parse.Cloud.define("getPosts", function(request, response){
   const query = new Parse.Query("Post");
   query.find()
   .then((results) => {
     results.forEach(result => {
        result.set("cloudTestField", "this is a testing server cloud field");
     });
    return Parse.Object.saveAll(results);
   })
   .then((results) => {
     response.success(results);
   })
  .catch(() => {
    response.error("wasnt able to retrieve post parse objs");
  }); 
});

это доставляет все новые поля для моего клиента. но если я не сохраню их в БД и просто добавлю их до доставки клиенту что-то вроде этого:

Parse.Cloud.define("getPosts", function(request, response){
   const query = new Parse.Query("Post");
   query.find()
   .then((results) => {
       results.forEach(result => {
        result.set("cloudTestField", "this is a testing server cloud field");
       });
     response.success(results);
    })
   .catch(() => {
    response.error("wasnt able to retrieve post parse objs");
   }); 
});

Тогда по какой-то причине, в моей андроид студии (клиентский лог) я получаю ноль на ключе "cloudTestField"

ParseCloud.callFunctionInBackground("getPosts", params,
            new FunctionCallback<List<ParseObject>>(){
                @Override
                public void done(List<ParseObject> objects, ParseException e) {
                    if (objects.size() > 0 && e == null) {
                        for (ParseObject postObj : objects) {
                            Log.d("newField", postObj.getString("cloudTestField"));
                        }
                    } else if (objects.size() <= 0) {
                        Log.d("parseCloudResponse", "sorry man. no objects from server");
                    } else {
                        Log.d("parseCloudResponse", e.getMessage());
                    }
                }
            });

и по какой-то причине вывод:

newField: null

Как добавить поля в ParseObjects в облаке без сохранения в БД

1 ответ

Оказывается, вы не можете добавлять поля, которые не являются постоянными - в ParseObject. Поэтому мне нужно было преобразовать parseObjects в Json, и теперь он работает как шарм:

Parse.Cloud.define("getPosts", function(request, response){
const query = new Parse.Query("Post");
var postJsonList = [];
query.find()
.then((results) => {
    results.forEach(result => {
        var post = result.toJSON();
        post.cloudTestField = "this is a testing server cloud field";
        postJsonList.push(post);
    });
    response.success(postJsonList);
})
.catch(() => {
    response.error("wasnt able to retrieve post parse objs");
}); 
});
Другие вопросы по тегам