我想为我的Loopback 4 API运行计划任务。我可以使用node-cron或node-schedule等软件包轻松地使用节点设置计划任务。
我的问题是我在Loopback 4 API中应该在何处以及如何实现此代码?
我的想法是编写一个Custom Booter,它将在Loopback API“启动”时发现并运行cron逻辑。但是不确定我是否在这里走正确的道路。 https://loopback.io/doc/en/lb4/Booting-an-Application.html#custom-booters
我们完成了相同的任务并按照您描述的方式执行,即我们在启动脚本中初始化基于cron的任务。它工作得很好。
在Node.js中执行任务时,您可能需要考虑以下事项:
我的问题是我在Loopback 4 API中应该在何处以及如何实现此代码?
所以,答案是继续并以你提出的方式实施它。您可以在自定义引导程序中初始化任务。您还应该根据您的业务需求考虑我上面提到的要点。
https://www.npmjs.com/package/node-cron
$ npm install --save node-cron
import { CronController } from "./controller/cron.controller";
const cron = require('node-cron');
export class Cron {
constructor(
protected cronController: CronController,
) {
}
async start() {
this.eachMinute();
}
private async eachMinute() {
console.log('Start Cron Jobs');
cron.schedule('* * * * *', async () => {
await this.cronController.start();
console.log('running a task every minute');
});
}
}
// index.ts
export async function main(options: ApplicationConfig = {}) {
const app = new MyApplication(options);
await app.boot();
await app.start();
const url = app.restServer.url;
console.log(`Server is running at ${url}`);
console.log(`Try ${url}/ping`);
// Instanciate CronController
const cronController = app.controller(CronController);
// Get Instance
const cronControllerInstance = await cronController.getValue(app);
// Inject by constructor
const cron = new Cron(cronControllerInstance);
// Invoke method
cron.start();
return app;
}
原文答案https://github.com/strongloop/loopback/issues/4047#issuecomment-523637653