簡體   English   中英

作為 Windows 服務啟動 nestjs 項目

[英]Start nestjs project as a Windows service

我們曾經使用 Docker 容器啟動 Angular 和 NestJS(基於 node.js)項目。 由於各種原因,該解決方案已停止使用,因此我們正在尋找一種方法來在 PC 啟動時(或在觸發器上)啟動這些項目,並在發生崩潰時自動重新啟動項目。

節點窗口

這個 package 從 node.js 項目構建了一個 Windows 服務。 NestJS 基於 node.js,使用 node.js 啟動它是這樣完成的(在項目文件夾中):

node PATH_TO_PROJECT\node_modules\@nestjs\cli\bin\nest.js start --config.\tsconfig.build.json

使用的腳本:

const svc = new Service({
  name: 'Test',
  description: 'Test',
    script:
      'PATH_TO_PROJECT\\node_modules\\@nestjs\\cli\\bin\\nest.js',
    scriptOptions: [
      'start --watch --config PATH_TO_PROJECT\\tsconfig.build.json',
    ],
  ],
  execPath: 'C:\\Program Files\\nodejs\\node.exe',
});

svc.on('install', function () {
  console.log('installed');
  svc.start();
});
svc.install();

安裝按預期工作,但在瀏覽器中無法訪問服務器。

問題

  1. 有沒有辦法在 NestJS 項目中使用節點窗口?
  2. nest cli start命令是否可以使用絕對路徑? (例如 nest start --config ABSOLUTE_PATH)
  3. 你將如何以同樣的方式啟動一個 Angular 項目?

謝謝你。

我使用'child_process'庫來運行這樣的命令

服務器.js

const { exec } = require("child_process");

exec("npm run start", (error, stdout, stderr) => {
    if (error) {
        console.log(`error: ${error.message}`);
        return;
    }
    if (stderr) {
        console.log(`stderr: ${stderr}`);
        return;
    }
    console.log(`stdout: ${stdout}`);
});

並像這樣使用節點窗口

var Service = require('node-windows').Service;
var serviceDetail = require('./servicename')();

console.log(serviceDetail);
// Create a new service object
var svc = new Service({
  name: serviceDetail.name,
  description: serviceDetail.detail,
  script: './server.js'
});
console.log('start building up service name ' + serviceDetail.name);
// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

svc.install();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM