Strapi v4 で予約方法をする方法

2022/04/10に公開

Strapi v3から若干変更があったので投稿します。
筆者はStrapi v4.1.5で動作を使用しています。

僕はpostというコンテンツを作り、そこに記事を入れてます。
articleなどの方はいずれかを書き換えてください。

流れ

  1. configにcron-tasks.jsを作成し、コードを書く
  2. server.jsにcronをtrueにするコードを書く

1.configにcron-tasks.jsを作成し、コードを書く

config/cron-cron-tasks.js を作り、以下のようなコードを書く

const Strapi = require("@strapi/strapi/lib/Strapi");
module.exports = {
  "*/1 * * * *": {
    // fetch articles to publish
    task: async () => {
      const draftArticleToPublish = await strapi.db
        .query("api::post.post")
        .findMany({
          where: {
            publishedAt: {
              $null: true,
            },
            publish_at: {
              $lt: new Date(),
            },
          },
        });

      // update published_at of articles
      await Promise.all(
        draftArticleToPublish.map((post) => {
          return strapi
            .service("api::post.post")
            .update(post.id, { data: { publishedAt: new Date() } });
        })
      );
    },

    options: {
      tz: "Asia/Tokyo",
    },
  },
};

2.server.jsにcronをtrueにするコードを書く

server.jsに以下をコピペ。
別途コードがあれば、
const cronTasksと、portの下のcron:の部分だけコピペで動くと思います。

const cronTasks = require("./cron-tasks.js");

module.exports = ({ env }) => ({
  host: env("HOST", "0.0.0.0"),
  port: env.int("PORT", 1337),
  cron: {
    enabled: true,
    tasks: cronTasks,
  },
});

おすすめの書籍

Strapiのおすすめの書籍は今のところありませんが、
一般的にGatsby.jsで利用するかと思うので、gatsby.jsの本を記載します。

【特典付き! 】Webサイト高速化のための 静的サイトジェネレーター活用入門
https://amzn.to/37ynTeG

React & Gatsby開発入門
https://amzn.to/3rfLLKN

Discussion