Как изящно остановить слушатель сервера nodejs на macOS (mojave 10.14)? - PullRequest
0 голосов
/ 08 мая 2019

Я изучаю nodejs. Я следовал руководству здесь на официальном сайте и создал app.js. Это простое приложение, которое создает HTTP-сервер, прослушивающий определенный порт.

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Я использую macOS Mojave 10.14. Я выполнил это через терминал, сервер начал слушать. Теперь нет изящного способа выбраться. Я пытался,
1. process.exit () - без эффекта
2. Command + C - без эффекта (только звуковой сигнал ошибки)
3. Command + D - просто отправляет терминал в фоновый режим, но процесс все еще выполняется.

Осталось только с возможностью открыть новый терминал и убить его kill -9 PID или killall узел. (Это не изящный способ)

Нет ли изящного способа выйти из этого процесса узла?

P.S. Другая проблема - когда вы завершаете процесс через другой экземпляр терминала, команды, которые передаются (варианты с 1 по 3) во время работы серверного процесса, выполняются на терминале, где был запущен серверный процесс. например
1. термин 1 -> серверный процесс, запущенный узлом -> попытался закрыть процесс с помощью перечисленных выше параметров 1–3,
2. термин 2 -> узел killall
3. в термине 1 -> серверный процесс умер -> команды в опции 1, 2 и 3 выполняются. Я не понял, почему это произошло.

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Грязный путь

Ctrl-C прекрасно работает в моем случае (убедитесь, что ваш Ctrl не сопоставлен с чем-то другим: http://www.owsiak.org/macos-vim-modifer-keys-easier-life/)

enter image description here

Изящно

1. Файл пакета

-- 8< --- package.json -- 8< --- 
{
  "scripts": {
    "start": "node app.js",
    "stop": "node app.stop.js"
  },
  "dependencies": {
    "socket.io": "^2.2.0",
    "socket.io-client": "^2.2.0"
  }
}

2. Применение

-- 8< --- app.js -- 8< --- 
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

const io = require('socket.io')(server);
io.on('connection', (socketServer) => {
  socketServer.on('stop', () => {
    process.exit(0);
  });
});
-- 8< --- app.json -- 8< --- 

3. Стопер

-- 8< --- app.stop.json -- 8< ---
const io = require('socket.io-client');
const socketClient = io.connect('http://127.0.0.1:3000/');

socketClient.on('connect', () => {
  socketClient.emit('stop');
  setTimeout(() => {
    process.exit(0);
  }, 1000);
});
-- 8< --- app.stop.json -- 8< ---

4. Исполнение

npm install socket.io-client
npm install socket.io
npm start

# in another console
npm stop
1 голос
/ 08 мая 2019

Чтобы завершить основной процесс в системах UNIX, нажмите Ctrl + c .Это не следует путать с клавишей ⌘ Command .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...