Пользовательский код контроллера для Strapi Beta (3.0) - PullRequest
0 голосов
/ 17 октября 2019

У меня есть код из предыдущей версии Strapi, который работает, и бета-версия контроллеров сильно отличается. Добавлен шаблон multipart / santification, и что-то изменилось. Не понимаю, как интегрировать мой объект заказа и плату за полосу.

Вот примерный образец:

  module.exports = {
       async create(ctx) {


 // New Boilerplate added with Strapi Beta - how to integrate this with custom stuff below? 
 let entity;
   if (ctx.is('multipart')) {
     const { data, files } = parseMultipartData(ctx);
     entity = await service.create(data, { files });
   } else {
     entity = await service.create(ctx.request.body);
   }
return sanitizeEntity(entity, { model });
 }
  }

Вот мой пользовательский код (имя контроллера Order.js)

 const { address, amount, products, postalCode, token, city } = ctx.request.body;

 // Send charge to Stripe
 const charge = await stripe.charges.create({
   amount: amount * 100,
   currency: 'usd',
   description: `Order ${new Date(Date.now())} - User ${ctx.state.user.id}`,
   source: token
 });

 // Create order in database
 const order = await strapi.services.order.add({
   user: ctx.state.user.id,
   address,
   amount,
   products,
   postalCode,
   city
 });

Похоже, я бы добавил свой код ко второй части оператора if, поскольку он не является составным, а не пользовательским, если "entity" - это реальное имя переменной, в которой нуждается Strapi или переменная-заполнитель, в которую я переименую "order "Код отлично работает в Alpha, но прочтите документы Strapi, и нет никаких объяснений того, как использовать эту структуру с переменными" entity ", {model} и" data ".

1 Ответ

0 голосов
/ 18 октября 2019

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

Теперь о вашем сценарии использования, service. должен быть заменен на strapi.api.order.service.order в вашем случае. Я согласен, что документ не ясно! Я обновлю это прямо сейчас.

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

module.exports = {
  async create(ctx) {
    // New Boilerplate added with Strapi Beta - how to integrate this with custom stuff below?
    let entity;
    if (ctx.is('multipart')) {
      const { data, files } = parseMultipartData(ctx);
      entity = await strapi.api.order.services.order.create(data, { files });
    } else {
      const { address, amount, products, postalCode, token, city } = ctx.request.body;

      // Send charge to Stripe
      const charge = await stripe.charges.create({
        amount: amount * 100,
        currency: 'usd',
        description: `Order ${new Date(Date.now())} - User ${ctx.state.user.id}`,
        source: token
      });

      entity = await strapi.api.order.services.order.create({
        user: ctx.state.user,
        address,
        amount,
        products,
        postalCode,
        city
      });
    }
    return sanitizeEntity(entity, { model: strapi.query('order').model });
  }
}
...