我创建了一个后台任务,定期在 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 * * * *",
},
},
};
您的设置有问题:
// 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
}
}