javascript - Strapi Beta (3.0) 的自定义 Controller 代码

标签 javascript node.js reactjs ecmascript-6 strapi

我有一些来自以前版本的 Strapi 的代码可以运行,而 beta 版本的 Controller 有很大不同。添加了多部分/ sanitizer 样板,并且某些内容发生了变化。不明白如何集成我的订单对象和条纹费用。

这是添加的样板:

  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 });
 }
  }

这是我的自定义代码( Controller 名称是 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 语句的第二部分,因为它不是多部分,但如果“实体”是 Strapi 需要的真实变量名或占位符变量(我重命名为“order”),则不是用户代码有效在 Alpha 中很好,但阅读 Strapi 文档,没有解释如何使用此结构与“实体”、{model} 和“数据”变量。

最佳答案

在以前版本的 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 });
  }
}

关于javascript - Strapi Beta (3.0) 的自定义 Controller 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58434316/

相关文章:

javascript - 让 Vimeo 视频在结束时消失,并在单击时停止

javascript - 可以将 coffeescript/javascript 中的其他对象属性动态添加到现有对象吗?

node.js - 在我的 Nodejs API 中使用 Mongoose 发布到 MongoDB Atlas 时无法正常工作

javascript - 初学者困惑: Four Quadrant Selection Grid in a Pop-Up Form Using Material UI & React

javascript - D3.js 只是绘制一条垂直线而不是实际绘图

javascript - 基于状态的函数执行无法正常工作

javascript - 从数组中随机选择

node.js - Visual Studio Code - 使用 TypeScript 和自动重启调试 Node.js 应用程序

javascript - 在 React 的生命周期方法之外添加类名

javascript - Redux - 返回调用函数信息以更新 Prop /状态