Как обрабатывать создание пользовательских данных в Strapi - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть внешний API-интерфейс для размещения данных в моем проекте. Я хочу перенести свой проект в Страпи. Но, конечно, форма этого внешнего POST не соответствует конечной точке создания данных моей модели Strapi. Кроме того, он находится в XML, поэтому мне нужно разобрать его вначале, а также нужно изменить входящие данные, чтобы лучше соответствовать модели. Как следует go о.

Мои мысли включают в себя:

  1. создать промежуточное программное обеспечение, которое проверяет входящие данные и перемоделирует их в соответствии с моей моделью
  2. создать Маршрут, который указывает на контроллер, который обрабатывает данные и создает модель из кода. У меня есть проблемы с поиском инструкций в документах, но я думаю, что это будет: strapi.query('myModel').create({})

Мне бы очень хотелось услышать некоторые идеи и концепции от людей, знакомых со Страпи.

1 Ответ

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

Итак, для ответа на этот вопрос.

Вам придется использовать эту концепцию - https://strapi.io/documentation/3.0.0-beta.x/concepts/controllers.html#core -контроллеры

Настройка функции create контроллера.

И в начале функции вам нужно будет проверить формат ctx.request.body.

Если содержимое имеет формат XML, в этом случае вам придется преобразовать его в JSON.

Путь - api/**/controllers/**.js

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

module.exports = {
  /**
   * Create a record.
   *
   * @return {Object}
   */

  async create(ctx) {
    // if ctx.request.body is XML
    // ctx.request.body = convertXMLtoJSON(ctx.request.body);
    // you will have to find a code that convert XML to JSON
    // and simply add id in this function

    let entity;
    if (ctx.is('multipart')) {
      const { data, files } = parseMultipartData(ctx);
      entity = await strapi.services.restaurant.create(data, { files });
    } else {
      entity = await strapi.services.restaurant.create(ctx.request.body);
    }
    return sanitizeEntity(entity, { model: strapi.models.restaurant });
  },
};
...