Strapi Beta (3.0) 的自定义控制器代码
Custom Controller code for Strapi Beta (3.0)
我有一些来自以前版本的 Strapi 的代码可以工作,而控制器的 beta 版本有很大不同。添加了 multipart / santization 样板文件,并且发生了一些变化。不明白如何整合我的订单对象和条纹费用。
这是添加的样板文件:
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" 变量一起使用。
在以前版本的 Strapi 中,要将文件上传到新条目,您必须先创建条目,然后再上传图像并指定要 link 此图像的条目。
现在有了 multipart,您可以在发送输入属性的同时发送图像。
关于您的用例,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 });
}
}
我有一些来自以前版本的 Strapi 的代码可以工作,而控制器的 beta 版本有很大不同。添加了 multipart / santization 样板文件,并且发生了一些变化。不明白如何整合我的订单对象和条纹费用。
这是添加的样板文件:
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" 变量一起使用。
在以前版本的 Strapi 中,要将文件上传到新条目,您必须先创建条目,然后再上传图像并指定要 link 此图像的条目。 现在有了 multipart,您可以在发送输入属性的同时发送图像。
关于您的用例,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 });
}
}