Добавление новых полей в 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");
});
});