nodemon запускает сервер с ошибкой каждый второй раз после сохранения - PullRequest
1 голос
/ 06 ноября 2019

Я использую linux mint 19.02. Написал простой сервер.

const http = require('http');
const express = require('express');
const dotenv = require('dotenv').config();

const app = express();
const server = http.createServer(app);
const port = process.env.PORT // 8081;

app.get('/', (req, res) => {
    res.send('Hello world!!!');
});

Вот мой файл package.json.

{
  "name": "matel",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node src/index.js",
    "dev": "nodemon src/index.js"
  },
  ...
  "license": "ISC",
  "dependencies": {
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "nodemon": "^1.19.4"
  }
}

Когда я запускаю сервер с помощью команды npm run dev, я получаю сообщение об ошибке. И, нажав на ссылку http://localhost:8081/ в браузере, я также получаю ошибку (логическую).

events.js: 187 throw er;// Необработанное событие 'error' ^

Ошибка: прослушивание EADDRINUSE: адрес уже используется ::: 8081 в Server.setupListenHandle [как _listen2] (net.js: 1300: 14) в listenInCluster (net.js): 1348: 12) в Server.listen (net.js: 1436: 7) в Object. (/home/user/projects/matel/src/index.js:13:8) в Module._compile (внутренний / modules / cjs / loader.js: 956: 30) в Object.Module._extensions..js (внутренний/modules/cjs/loader.js:973:10) в Module.load (внутренний / modules / cjs / loader.js: 812: 32) в Function.Module._load (внутренний / modules / cjs / loader.js: 724: 14) в Function.Module.runMain (внутренняя / modules / cjs / loader.js: 1025: 10) во внутреннем / main / run_main_module.js: 17: 11 Произошло событие «ошибка» на экземпляре сервера в: at emitErrorNT (net.js: 1327: 8) at processTicksAndRejected (internal / process / task_queues.js: 80: 21) {code: 'EADDRINUSE', errno: 'EADDRINUSE', syscall: 'listen', address: '::', port:8081}

Но когда я нажимаю сохранить ctrl + s файл ключа, все работает нормально. И, нажав на ссылку http://localhost:8081 / в браузере, я получаю Hello world!!!, когда я снова нажимаю комбинацию клавиш ctrl + s, я снова получаю ошибку. И так каждый второй раз.

Я запускаю команду fuser -k 8081/tcp, после чего сервер запускается без ошибок, но когда я сохраняю файл, я получаю сообщение об ошибке, при следующем сохранении сервера он запускаетсяработает. И так каждый второй раз.

В чем может быть причина того, что сервер может вести себя так? В чем моя ошибка?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

вы можете использовать

fuser -n tcp -k portnumber
0 голосов
/ 06 ноября 2019

Итак, основываясь на сообщении об ошибке (и частоте его появления), я думаю, что проблема здесь в том, что порт может использоваться другим приложением. Обычно используются порты 8080 и 8081, а также порты goto для таких приложений, как Skype и т. Д. Поэтому, когда вы заставите его работать, вы, вероятно, немного угоните порт. Так что это будет похоже на целую борьбу за власть между различными приложениями и этим портом.

Поэтому я предлагаю попробовать разные порты и посмотреть, не решит ли это проблему?

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