Как очистить данные при использовании книжной полки прямо в страпее - PullRequest
0 голосов
/ 27 апреля 2020

, так как в Strapi, похоже, пока нет поддержки для предложения OR (https://github.com/strapi/strapi/issues/3194), я использую Книжную полку прямо как

const result = await strapi.query('friendship')
    .find({
        where: { user1: 1 },
        orWhere: { user2: 1 }
    })
    .fetchAll()

Теперь обычно вы можете продезинфицировать ваши данные, используя

sanitizeEntity(entities, { model: strapi.models.friendship });

, но это не сработает, так как мы в основном оставили абстракцию Strapi, верно? Могу ли я еще как-то санировать данные, сравнивая их с моделью или чем-то в этом роде?

1 Ответ

1 голос
/ 30 апреля 2020

Поскольку вы обращаетесь к книжной полке напрямую, вам необходимо преобразовать набор результатов в json. У книжной полки есть toJSON помощник для этого. sanitizeEntity, как следует из названия, может использоваться только для одного результата.

const { sanitizeEntity } = require('strapi-utils');

module.exports = {
  async findFriends(){
    const entities = await strapi.query('friendship')
        .find({
            where: { user1: 1 },
            orWhere: { user2: 1 }
        })
        .fetchAll()
        .then(results => results.toJSON());

    return entities.map(entity => sanitizeEntity( { 
      model: strapi.models.friendship 
    } ))
  }
}

Если вы хотите копать глубже, вы можете проверить свои node_modules для этого файла node_modules/strapi/packages/strapi-connector-bookshelf/lib/queries.js. Вот как strapi устанавливает сервисный помощник find для вашей модели.

  function find(params, populate, { transacting } = {}) {
    const filters = convertRestQueryParams(params);

    return model
      .query(buildQuery({ model, filters }))
      .fetchAll({
        withRelated: populate,
        transacting,
      })
      .then(results => results.toJSON());
  }
...