【问题标题】:How to run one off tasks in NestJS如何在 NestJS 中运行一次性任务
【发布时间】:2022-11-11 12:36:45
【问题描述】:

我是 NestJS 的新手,我正在尝试找出运行一次性初始化任务和导入任务的最佳方法。在 Rails 中,您将使用 Rake 来运行任务,但我不确定在这里使用什么。我看到了类似nest-commander 和nestjs-cli 的东西,但那些似乎你需要设置另一个应用程序实例才能使其工作,我不确定这是否是处理它的正确方法。我也见过像 Jake 这样的其他工具,但我需要在任务中访问我的 NestJS 模块。任何人都找到了处理这个问题的好方法,或者有一个在项目中如何处理好的例子?

【问题讨论】:

  • 您需要运行哪些类型的任务以及何时需要运行它们?
  • @JayMcDoniel 我需要运行数据导入/导出(到 Postgres)。在 Rails 中,我可以制作 rake 任务并从 CLI 运行它们,这非常有用。我只是不知道用 NestJS 处理这个问题的好方法。我尝试了 nest-commander 并制作了一个 command.ts 文件,但这似乎效果不佳。
  • 我是nest-commander 的作者,所以如果您对此有任何疑问,我很乐意提供帮助。否则,您几乎需要制作可以按需运行的 JS 脚本
  • @JayMcDoniel 是否有任何好的文档可以展示如何将它与应用程序或示例代码一起使用? NestJS 和 nest-commander 站点本身的文档都展示了如何将其用作 CLI 应用程序,但不是串联使用。
  • 我没有任何直接的东西,但可以解释这个想法。你开始你的巢服务器main.ts,对吧?对于串联的 CLI,您可以创建一个使用 CommandFactorycli.ts 文件并导入正确的根模块。然后,在编译项目而不是使用 nest startnode dist/main 之后,您调用 node dist/cli 并以这种方式运行 CLI 命令。我会看看我是否能找到时间写一些样本

标签: typescript express nestjs typeorm


【解决方案1】:

在这种情况下,我可能会做的是

  • 创建一个带有服务的模块。
  • 创建为您做事的方法
  • 应该有一个可以启动任务的init方法
  • 使用测试编译此模块并为启动任务的服务方法运行测试。

【讨论】:

    【解决方案2】:

    我从main.ts 文件中@nestjs/config 包的ConfigService 的使用中获得灵感。如documentation 中所述,您可以在引导方法中引用该服务并对其调用方法。同样,您可以使用自己的服务来做到这一点:

    const myService = app.get(MyService);
    await myService.initialiseSomething();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2017-07-10
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多