Как интегрировать Strapi с SSG с помощью обратных вызовов жизненного цикла?

Я использую Strapi вместе с генератором статических сайтов (Gatsby) и пытаюсь автоматизировать процесс «перестройки» всякий раз, когда вы вносите какие-либо изменения в контент CMS.

Я пытаюсь использовать обратные вызовы жизненного цикла, упомянутые в документации Strapi, для этого: https://strapi.io/documentation/3.xx/guides/webhooks.html

Проблема в том, что эти обратные вызовы вызываются несколько раз в разных моделях. Например, обратный вызов afterUpdate вызывается 5 раз для 5 моделей, которые у меня есть.

Я хочу выполнять функцию триггера сборки только один раз за каждое изменение, есть ли способ сделать это?


person Carlos Martinez    schedule 15.05.2019    source источник


Ответы (1)


Кажется, это правильное поведение обратных вызовов жизненного цикла Strapi: https://github.com/strapi/strapi/issues/1153

На самом деле здесь нет никаких проблем. Фактически, когда вы создаете запись, мы сначала создаем запись, а затем обновляем для обработки отношений. Вот почему многие события запускаются при создании записи.

Документация вводит в заблуждение, и я не думаю, что для запуска сборок SSG следует использовать методы жизненного цикла.

Я нашел лучший выбор - использовать контроллер ContentManager.js, он находится в: plugins/content-manager/controllers/ContentManager.js

Функции create, update и delete вызываются только один раз за запрос, поэтому это лучшее место для запуска сборки 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();
},
person Carlos Martinez    schedule 15.05.2019