Изменить объект, прежде чем клиент получит его в LiveQuery - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь скрыть некоторые поля в своем облачном коде для класса с блокирующим значением до номера по умолчанию в триггере afterFind.

Parse.Cloud.afterFind("Question", async (req) => {
  let objs = req.objects;
  if (req.master) return req.objects;
  objs.forEach(obj => {
    obj.set("answer", -100);
  });
  return objs;
});

Это работает нормально, но когда я подписываюсь на этот класс с помощью LiveQuery при обновлении я вижу все поля в моей консоли.

sub.on("update", async (obj) => {
      console.log(obj.toJSON());
      //this.getQuestion(this.cat_id);
    });

Есть ли способ изменить / заблокировать поля в событиях LiveQuery?

РЕДАКТИРОВАТЬ:

Я пытается реализовать защищенные поля, но это дает тот же ответ

var api = new ParseServer({
  databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
  cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
  appId: process.env.APP_ID || 'id',
  masterKey: process.env.MASTER_KEY || 'master', //Add your master key here. Keep it secret!
  serverURL: process.env.SERVER_URL || 'http://localhost:1337/parse',  // Don't forget to change to https if needed
  liveQuery: {
    classNames: ["Message", "Marker", "Question"] // List of classes to support for query subscriptions
  },
  protectedFields: {
   Question: {
    "*": ["answer", "active"]
   }

}});

LiveQuery:

async subToQuestions(category) {
  let questionQuery = new Parse.Query(Question);
  questionQuery.equalTo("category", category);
  try {
    return await questionQuery.subscribe();
  }
  catch (e) {
    throw e;
  }
}

категория указатель

async subToQuestion(cat) {
    let sub = await this.ParseService.subToQuestions(cat);
    sub.on('create', async (obj) => {
      console.log(obj.toJSON());
    });
    sub.on("update", async (obj) => {
      console.log(obj.toJSON());
    });
  }

Когда я регистрирую результат LiveQuery, он также запрашивает защищенные поля.

И beforeFind для класса вопросов

Parse.Cloud.beforeFind("Question", async (req) => {
  let query = req.query;
  query.limit(1);
  query.equalTo("active", true);
  let now = new Date();
  query.greaterThan("close_date", now);
  query.include(["close_date", "text"]);
});

Пример запроса enter image description here

...