可以在strapi上的自定义端点上获取原始实体吗?

可以在strapi上的自定义端点上获取原始实体吗?,strapi,Strapi,我正在Strapi上构建一个自定义端点。我需要原始的内容来创建这个端点。是否可以从ctx变量中获取它 stripe : async(ctx) => { // Handle the event const sig = ctx.request.headers['stripe-signature'] let event = null try { // ctx.request.body needs to be the original raw

我正在Strapi上构建一个自定义端点。我需要原始的内容来创建这个端点。是否可以从ctx变量中获取它

stripe : async(ctx) => {
    // Handle the event
    const sig = ctx.request.headers['stripe-signature']
    
    let event = null
    try {
      // ctx.request.body needs to be the original raw body
      event = stripe.webhooks.constructEvent(ctx.request.body,sig, endpointSecret)
    }catch (e) {
      ctx.badRequest(null,e)
      return
    }

我不确定是否理解你的需要

ctx.request.body包含请求的原始正文

之后,如果您想将事件作为响应体发送,您可以这样做。 ctx.body=事件


代码中还有一个警告。您编写了为事件定义常量,并将strapi webhook的结果分配给事件。您必须定义一个let变量。

我不确定是否理解您的需要

ctx.request.body包含请求的原始正文

之后,如果您想将事件作为响应体发送,您可以这样做。 ctx.body=事件


代码中还有一个警告。您编写了为事件定义常量,并将strapi webhook的结果分配给事件。您必须定义一个let变量。

它实际上是通过在请求环境配置config/environments/development/request.json->parser.includeUnparsed:true中打开includinUnparsed来工作的

您可以使用koa body内置功能访问未解析的body:

有些应用程序需要对请求主体进行Cryptographic验证,例如slack或stripe的Webhook。如果koa正文的选项中includeUnparsed为true,则可以访问未解析正文。启用后,从unparsed=require'koa-body/unparsed.js'导入用于访问请求正文的符号,或使用unparsed=symbol.for'unparsedBody'定义您自己的访问者。然后,可以使用ctx.request.body[unparsed]获得未解析的正文


它实际上是通过在请求环境配置config/environments/development/request.json->parser.includeUnparsed:true中打开includingUnparsed来工作的

您可以使用koa body内置功能访问未解析的body:

有些应用程序需要对请求主体进行Cryptographic验证,例如slack或stripe的Webhook。如果koa正文的选项中includeUnparsed为true,则可以访问未解析正文。启用后,从unparsed=require'koa-body/unparsed.js'导入用于访问请求正文的符号,或使用unparsed=symbol.for'unparsedBody'定义您自己的访问者。然后,可以使用ctx.request.body[unparsed]获得未解析的正文

官方的KoaBodyParser包实际上是开箱即用的。见:

下面是一个小例子:

从膝关节炎中导入膝关节炎; 从“@koa/router”导入KoaRouter; 从“koa bodyparser”导入koaBodyParser; const app =新的膝关节炎; const路由器=新的KoaRouter; const stripeCheckout=ctx,next=>{ const sig=ctx.request.header['stripe-signature']; 让事件发生; if!process.env.STRIPE\u ENDPOINT\u SECRET{ 抛出新错误“缺少条带端点机密”; } 试一试{ event=stripe.webhooks.constructEvent ctx.request.rawBody, 西格, endpointSecret:process.env.STRIPE\u ENDPOINT\u SECRET ; }犯错误{ 记录器“错误”,错误; ctx.status=400; ctx.body=`Webhook错误:${err.message}`; 下一步返回; } //…对这件事做点什么 如果event.type===“checkout.session.completed”{ const session=event.data.object; //…对结帐会话执行一些操作 } //返回响应以确认事件的接收 ctx.status=200; ctx.body={received:true}; 下一步返回; }; //职位 router.post'/stripe checkout',stripeCheckout; app.usekoaBodyParser; app.userouter.routes; app.userouter.allowedMethods; app.listenport,=>{ 记录器'log'`✅ 完成!服务器正在侦听http://localhost:${port}`; }; 官方的KoaBodyParser包实际上是开箱即用的。见:

下面是一个小例子:

从膝关节炎中导入膝关节炎; 从“@koa/router”导入KoaRouter; 从“koa bodyparser”导入koaBodyParser; const app =新的膝关节炎; const路由器=新的KoaRouter; const stripeCheckout=ctx,next=>{ const sig=ctx.request.header['stripe-signature']; 让事件发生; if!process.env.STRIPE\u ENDPOINT\u SECRET{ 抛出新错误“缺少条带端点机密”; } 试一试{ event=stripe.webhooks.constructEvent ctx.request.rawBody, 西格, endpointSecret:process.env.STRIPE\u ENDPOINT\u SECRET ; }犯错误{ 记录器“错误”,错误; ctx.status=400; ctx.body=`Webhook错误:${err.message}`; 下一步返回; } //…对这件事做点什么 如果event.type===“checkout.session.completed”{ const session=event.data.object; //…对结帐会话执行一些操作 } //返回响应以确认事件的接收 ctx.status=200; ctx.body={received:true}; 下一步返回; }; //职位 router.post'/stripe checkout',stripeCheckout; app.usekoaBodyParser; app.userouter.routes; app.us 允许的方法; app.listenport,=>{ 记录器'log'`✅ 完成!服务器正在侦听http://localhost:${port}`; }; 创建一个middleware/config/middleware.js并将其更新为以下内容

module.exports = {
  settings: {
    cors: {
      enabled: true,
    },
    parser: {
      enabled: true,
      multipart: true,
      includeUnparsed: true,
    },
  },
};
在controller/api//controllers/.js中:

创建一个middleware/config/middleware.js并将其更新为以下内容

module.exports = {
  settings: {
    cors: {
      enabled: true,
    },
    parser: {
      enabled: true,
      multipart: true,
      includeUnparsed: true,
    },
  },
};
在controller/api//controllers/.js中:


请添加一些代码片段,以了解软件包如何帮助解决OP的问题@SuiteboyApps添加了一个以上示例^请添加一些代码片段,以了解软件包如何帮助解决OP的问题@SuiteboyApps添加了一个以上示例^