Почему запрос strapi `find ()` не возвращает массив? - PullRequest
1 голос
/ 14 июля 2020

Контекст

У меня есть внешнее приложение, которому требуется массив сообщений блога из API, и когда вы вызываете http://strapi-url/posts/ с запросом GET, оно возвращает все результаты как объекты в массиве. Счастливые дни.

Проблема

В конечном итоге я хочу иметь более сложные параметры GET с параметрами запроса, поэтому мне нужно изменить пост-контроллер и написать собственную функцию для find().

Когда я изменяю функцию find() в api/post/controllers/post.js и просто заставляю возвращать результат strapi.query('post').find(), он возвращает объект с ключами, а не массив.

Код

 async find(ctx) {
    let entity = await.strapi.query('post').find();
    return sanitizeEntity(entity, { model: strapi.models.post });
  },

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

1 Ответ

1 голос
/ 16 июля 2020

Код в sanitizeEntity действительно делает это. Вы можете проверить это в исходном коде (node_modules/strapi-utils/lib/sanitize-entity.js). Также вы можете увидеть это, отбросив строку sanitizeEntity - вы получите массив из await.strapi.query('post').find().

Вы можете запустить следующий тест ( добавить настраиваемую конечную точку ), чтобы увидеть результаты:

  async test2(ctx) {
    let entity = await strapi.query('post').find();
    ctx.send({
      message: 'okay',
      posts: entity,
      sanitizedPosts: sanitizeEntity(entity, { model: strapi.models.post })
    }, 200);
  }

Вы можете решить эту проблему, создав свою собственную настраиваемую функцию очистки , которая возвращает массив ИЛИ путем обработки результата перед его возвратом, например:

let entity = await strapi.query('post').find();
let sanitizedEntity = sanitizeEntity(entity, { model: strapi.models.post });
//process sanitized results to an array 
//return the result as array
...