Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 环回4个cron/计划任务_Node.js_Loopbackjs_Loopback - Fatal编程技术网

Node.js 环回4个cron/计划任务

Node.js 环回4个cron/计划任务,node.js,loopbackjs,loopback,Node.js,Loopbackjs,Loopback,我想为我的环回4 API运行计划任务。我可以使用node-cron或node-schedule等包非常轻松地使用node设置计划任务 我的问题是,我应该在我的环回4 API中的何处以及如何实现这段代码? 我的想法是编写一个自定义引导程序,它将在环回API“引导”时发现并运行cron逻辑。但是我不确定我是否走上了正确的道路。 我们有完全相同的任务,并按照您描述的方式完成,即我们在启动脚本中初始化基于任务。它工作得非常好 在No.js:任务中,您可能需要考虑一些事情。 如果计划运行节点应用程序的多

我想为我的环回4 API运行计划任务。我可以使用node-cron或node-schedule等包非常轻松地使用node设置计划任务

我的问题是,我应该在我的环回4 API中的何处以及如何实现这段代码?

我的想法是编写一个自定义引导程序,它将在环回API“引导”时发现并运行cron逻辑。但是我不确定我是否走上了正确的道路。

我们有完全相同的任务,并按照您描述的方式完成,即我们在启动脚本中初始化基于任务。它工作得非常好

在No.js:

任务中,您可能需要考虑一些事情。
  • 如果计划运行节点应用程序的多个实例(例如使用pm2或其他工具),则可能需要确保任务只在一个主节点上运行,而不是同时在所有节点上运行。如果主节点出现故障,则必须选择下一个节点作为新的主节点。根据业务逻辑,在您的情况下,这可能不是问题。在我们的案例中,它是强制性的,我们设法在PG中使用建议锁来实现它(我们使用了PG_尝试_建议_xact_锁和PG_建议_xact_锁的组合)
  • 您可能希望实现一个选项来停止/启动任务,并通过环回API/环回资源管理器查看其状态。我们在Loopback中创建了一些定制的API方法来实现这一点,并发现它非常有用
我的问题是,我应该在我的系统中的何处以及如何实现这段代码 环回4 API

因此,答案是按照你提出的方式去实施它。您可以在自定义引导程序中初始化任务。你也应该根据你的业务需求来考虑上面提到的要点。< / P>这个解决方案对我起了作用。 装置 创建一个组件 使用环回DI容器获取控制器实例: 原始答案

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;
}