
Допустим у вас есть приложение на node.js и вам нужно разместить его на ПК c Windows Server или на ПК с Windows. При этом приложение должно перезапускаться при перезагрузке компьютера. В моем случае задача состояла в размещении клиент — серверного приложения — склад на node.js на один из компьютеров в локальной сети.
Для решения задачи я использовал библиотеку node-windows, которая может использоваться для запуска и остановки приложений в качестве фоновых служб Windows.
Для примера создадим простое приложение — сервер с использованием библиотеки express, которое отправляет текст «Hello World» на страницу браузера по маршруту http://localhost:3000/
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))
Чтобы установить библиотеку node-windows, набираем в консоли, в папке нашего приложения:
npm install -g node-windows
npm link node-windows
Библиотека установится глобально, поэтому если вам нужно запустить другое приложение, достаточно набрать только вторую строчку.
Далее нам нужно создать два файла: для запуска и для остановки службы, например start-service.js и stop-service.js и разместить их в одной папке с файлом приложения.
Пишем код для файла запуска службы start-service.js
var Service = require('node-windows').Service;
// Создаем новый объект службы
var svc = new Service({
name:'Node application as Windows Service',
description: 'Node application as Windows Service',
script: 'C:\\nodeapp\\app.js', // путь к приложению
});
// Слушаем событие 'install' и запускаем службу
svc.on('install',function(){
svc.start();
});
// Устанавливаем службу
svc.install();
Пишем код для файла остановки службы stop-service.js
var Service = require('node-windows').Service;
// Создаем новый объект службы
var svc = new Service({
name:'Node application as Windows Service',
description: 'Node application as Windows Service',
script: 'C:\\nodeapp\\app.js', // путь к приложению
});
// Слушаем событие 'uninstall', пишем сообщение
svc.on('uninstall',function(){
console.log('Uninstall complete.');
console.log('The service exists: ',svc.exists);
});
// Удаляем службу
svc.uninstall();
Чтобы запустить службу, набираем в консоли:
$ node start-service.js
Чтобы остановить службу, набираем в консоли:
$ node stop-service.js
Библиотека node-windows создает папку daemon с исполняемыми файлами. Теперь, если нужно можно удалить исходные файлы приложения. Однако если приложение использует какие-то внешние файлы или папки, их нужно оставить. В моем случае я удалил все файлы, кроме папки c загружаемыми файлами uploads, папки public с фронтэндом (css, js, и др.), а также папки views c html шаблонами.
Желаю всем успешного развертывания!






Выходит ошибка при запуске сервиса:
var Service = require(‘node-windows’).Service;
^
ReferenceError: require is not defined
at file:///C:/windows/tgsh/start-service.js:1:15
?[90m at ModuleJob.run (internal/modules/esm/module_job.js:152:23)?[39m
?[90m at async Loader.import (internal/modules/esm/loader.js:166:24)?[39m
?[90m at async Object.loadESM (internal/process/esm_loader.js:68:5)?[39m
1 Проверьте, работает require в основном файле (у меня app.js). Если нет, то Node js настроен
на Import, с require могут быть проблемы (судя по всему вы используете ESM модуль)
2 После установки node-windows нужно зайти в папку, где находятся start-service.js и stop-service.js
набрать npm link node-windows