Strapi v5 Cron 任务:strapi.db.query().create 未按预期工作

问题描述 投票:0回答:1

我创建了一个后台任务,定期在 Strapi v5 的 cron-task 中请求 API 服务。
我让它将数据插入数据库只是为了测试此服务,但效果不佳。
我确认任务被定期调用,并且没有错误消息,

strapi.db.query().create
似乎不起作用。

// src/api/my-data/services/my-datat.ts
import { factories, Core } from '@strapi/strapi';
export default factories.createCoreController('api::my-data.my-data', ({ strapi }: { strapi: Core.Strapi }) => ({
  async test() {
    try {
      strapi.log.debug('my-data service test');
      await strapi.db.query('api::my-data.my-data').create({
        data: {
          boardId: 12,
          cate: 'test',
          title: 'test',
          link: 'test',
          datetime: new Date().toISOString(),
          comments: 1,
        },
      });
  }
}));
// in cron-task.ts
export default {
  // *    *    *    *    *    *
  // ┬    ┬    ┬    ┬    ┬    ┬
  // │    │    │    │    │    |
  // │    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
  // │    │    │    │    └───── month (1 - 12)
  // │    │    │    └────────── day of month (1 - 31)
  // │    │    └─────────────── hour (0 - 23)
  // │    └──────────────────── minute (0 - 59)
  // └───────────────────────── second (0 - 59, OPTIONAL)
  adddata: {
    task: async ({ strapi }) => {
      strapi.log.debug('Running data task...');
      const myDataService = strapi.service('api::my-data.my-data');
      await myDataService.test();
    },
    options: {
      rule: "*/1 * * * *",
    },
  },
};
strapi
1个回答
0
投票

您的设置有问题:

// src/api/my-data/services/my-datat.ts // You are pointing to a service here
import { factories, Core } from '@strapi/strapi';
export default factories.createCoreController // You are creating a controller not a service

你这里也有拼写错误:

// src/api/my-data/services/my-datat.ts

my-data
my-datat.ts

这可能是拼写错误,但我不得不提一下,

coreService
和普通服务有点不同。

基本上

coreService
每个
api
只能定义一次 所以:

// src/api/my-data/services/my-data.ts
import { factories } from "@strapi/strapi";

export default factories.createCoreService(
  "api::my-data.my-data",
  ({ strapi }) => ({
    async test(ctx) {
      return strapi.db.query("api::my-data.my-data").create({
        data: {
          test: Date.now(),
        },
      });
    },
  })
);
// config/tasks.ts
export default {
  myJob: {
    task: async ({ strapi }) => {
      console.log("TASK");

      const data = await strapi.service("api::my-data.my-data").test();

      console.log({ data });
    },
    options: {
      rule: "*/1 * * * *",
    },
  },
};
// config/server.ts
import tasks from "./tasks";

export default ({ env }) => ({
  host: env("HOST", "0.0.0.0"),
  port: env.int("PORT", 1337),
  app: {
    keys: env.array("APP_KEYS"),
  },
  cron: {
    enabled: true,
    tasks,
  },
});

输出:

TASK
{
  data: {
    id: 1,
    documentId: 'ry4qjid87l3jt0pusu7t4czm',
    test: '1735200900022',
    createdAt: '2024-12-26T08:15:00.023Z',
    updatedAt: '2024-12-26T08:15:00.023Z',
    publishedAt: '2024-12-26T08:15:00.025Z',
    locale: null
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.