如何使用生命周期回调将Strapi与SSG集成?

时间:2019-05-15 22:16:49

标签: strapi

我将Strapi与静态网站生成器(Gatsby)结合使用,并且每当您对CMS内容进行任何修改时,我都试图自动执行“重建”过程。

我正在尝试使用Strapi文档中提到的生命周期回调来做到这一点:https://strapi.io/documentation/3.x.x/guides/webhooks.html

问题在于这些回调在不同的模型中被多次调用。例如,对于我拥有的5个模型,“ afterUpdate”回调被调用了5次。

我只希望每次更改仅执行一次构建触发功能,有没有办法做到?

1 个答案:

答案 0 :(得分:0)

这似乎是Strapi生命周期回调的正确行为:https://github.com/strapi/strapi/issues/1153

  

实际上,这里没有问题。实际上,当您创建条目时,我们首先创建条目,然后进行更新以处理关系。这就是在创建条目时触发许多事件的原因。

该文档具有误导性,我认为不应使用生命周期方法来触发SSG构建。

我发现一个更好的选择是使用ContentManager.js控制器,它位于:plugins/content-manager/controllers/ContentManager.js

createupdatedelete函数每个请求仅被调用一次,因此这是触发SSG构建的更好位置:

delete: async ctx => {
    ctx.body = await strapi.plugins['content-manager'].services['contentmanager'].delete(ctx.params, ctx.request.query);

    // This is just a request to another service
    // that triggers the SSG build.
    await build.triggerSSGBuild();
},