ExpressJS - кінуць эр неапрацаваных падзеі памылкі

Я стварыў expressjs прыкладання з дапамогай наступных каманд:

express -e folderName
npm install ejs --save
npm install

Калі я запусціць прыкладанне: вузел app.js , у мяне ёсць наступныя памылкі:

events.js:72
    throw er;//Unhandled 'error' event
          ^
Error: listen EADDRINUSE
    at errnoException (net.js:884:11)
    at Server._listen2 (net.js:1022:14)
    at listen (net.js:1044:10)
    at Server.listen (net.js:1110:5)
    at Object. (folderName/app.js:33:24)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

Як гэта выправіць?

146
EADDRINUSE азначае, што порт ўжо выкарыстоўваецца. паспрабуйце змяніць тое, што порт вэб-сервер у app.js праслухоўвае або забіць усё, што ў цяперашні час выкарыстоўвае гэты порт, калі ён не патрэбны.
дададзена аўтар go-oleg, крыніца

20 адказы

Вы ўжо запускаць іншы сервер выкарыстоўвае адзін і той жа порт, як 8080.

Можа быць, вы ўжо запусціць прыкладанне вузел у іншы абалонцы, калі ласка, зачыніце яго і запусціць зноў.

<�Моцны> Вы можаце праверыць PORT няма. даступны або не з дапамогай кнопак

netstat -tulnp | grep 
349
дададзена
на Макінтош высокай Сьера: Lsof -np -i4TCP: $ PORT | Grep СЛУХАЦЬ
дададзена аўтар Roee, крыніца
Вельмі, вельмі інфарматыўна паведамленне пра памылку.
дададзена аўтар Evgeni Nabokov, крыніца
Амаль тры гады пасля таго, як, паведамленне пра памылку ж ... чартоўску павольных
дададзена аўтар cvsguimaraes, крыніца
Быў запушчаны асобнік Рэйкі сервера ...: |
дададзена аўтар Sheharyar, крыніца
Гэта здарылася са мной пры выкарыстанні вузла-ActiveDirectory. Мой окнеРазличающееся_имя_базыполе прапускаў субдомен. окнеРазличающееся_имя_базыполь: 'LDAP://DC = подобластей, dc = дамен, DC = ком'
дададзена аўтар Mark, крыніца
Такая агульная памылка сапраўды заслугоўвае лепшага паведамленне пра памылку.
дададзена аўтар Tamlyn, крыніца
Я пабег у гэта выкарыстанні WebStorm. У мяне было дзве адладкавыя сесіі, адкрытыя ў адной працоўнай вобласці. Doh!
дададзена аўтар Nick Curran, крыніца

Мы атрымліваем падобную памылку, калі мы часам запускаем наш экспрэс-дадатак. Мы павінны прытрымлівацца таго ж у гэтым выпадку. Нам трэба праверыць, калі яго працуе ў любым тэрмінале. Калі вы хочаце, каб знайсці і забіць працэс, выканайце наступныя дзеянні:

  • пс Окс | Grep вузел
  • <�Літый> Знайсці ідэнтыфікатар працэсу (другі злева): </літый>
  • забіць -9 PRCOCESS_ID

АБО

Выкарыстоўвайце адну каманду, каб закрыць усе запушчаныя працэсы вузла.

ps aux | awk '/node/{print $2}' | xargs kill -9
52
дададзена
Глядзіце, калі вы маеце killall каманды, набраўшы значна менш
дададзена аўтар LeeGee, крыніца
<�Код> пс Окс | Grep вузел | AWK '{друк $ 2}' | xargs забіць -9
дададзена аўтар Daniel, крыніца
<�Код> killall -r вузел (у Linux)
дададзена аўтар jt3k, крыніца

Асобнік, верагодна, усё яшчэ працуе. Гэта будзе выправіць.

killall node

Update: This command will only work on Linux/Ubuntu & Mac.

13
дададзена
Дзякуючы гэта дапамагло!
дададзена аўтар Ilyas karim, крыніца
на аснове TawabG аснове killall.
дададзена аўтар easymoden00b, крыніца

Калі вы на Linux, гэтая праблема можа ўзнікнуць, калі Nodejs не працуе як корань.

Змена ад гэтага:

nodejs /path/to/script.js

Для гэтага:

sudo nodejs /path/to/script.js

Так здарылася са мной, і ні адзін з іншых прапаноў тут не зафіксаваў яго. На шчасце, я ўспомніў сцэнар працаваў на другі дзень, калі працуюць як корань. Спадзяюся, што гэта дапамагае нехта!

Disclaimer: This probably isn't the best solution for a production environment. Starting your service as root may introduce some security holes to your server/applcation. In my case, this was a solution for a local service, but I'd encourage others to spend some more time trying to isolate the cause.

12
дададзена
Гучыць вельмі небяспечна проста запусціць скрыпт як корань, каб вырашыць гэтую праблему. Калі вы не спрабуеце прывязаць да порта пад 1024, вы ніколі не павінны запускаць вузел у якасці кораня. Я падазраю, што ў вашым выпадку, вы спрабуеце выканаць прывязку да порта 80 або 443. Я хацеў бы прапанаваць выкарыстоўваць Nginx, каб накіроўваць трафік з гэтых партоў nodejs на больш высокі порту, як 8000 ці нешта.
дададзена аўтар varikin, крыніца
Дзякуй за ўказанне на гэта. Я не думаю, што канкрэтны сцэнар я выкарыстаў называецца для любога з гэтых партоў, я, вядома, не выкарыстоўваць вузел у якасці сервера HTTP. Магчыма, гэта быў адзін з модуляў, якія я выкарыстаў, якія называюцца дадатковыя правы доступу? Я прашу прабачэння, гэта быў час, так што я нават не ўпэўнены, які сцэнар называецца для гэтага рашэння. Я дадам агаворку пра спробу гэта ў вытворчай асяроддзі.
дададзена аўтар CauselessEffect, крыніца

I fixed the bug by changing the port which was
app.set('port', process.env.PORT || 3000);
and changed to:
app.set('port', process.env.PORT || 8080);

7
дададзена
Як гэта адрозніваецца ад прымянення, што прыняты адказ кажа ў адказ даецца Маркам?
дададзена аўтар EWit, крыніца
гэта працуе для мяне, я выкарыстаў порт 3000
дададзена аўтар Lazaro Fernandes Lima, крыніца

Гэта адбываецца таму, што порт выкарыстоўваецца для запуску сцэнара ўжо выкарыстоўваецца. Вы павінны спыніць усе іншы вузел, выкарыстоўвае гэтую пасаду. для гэтага вы можаце праверыць ўвесь вузел,

ps -e

каб забіць ўвесь працэс вузла

sudo killall -9 node
6
дададзена

Вузел порта спрабуе выкарыстаць ужо можа быць выкарыстаны іншай праграмай. У маім выпадку гэта быў NTOP , які я нядаўна ўсталяваў. Я павінен быў адкрыць Http://лакальны: 3000/ ў браўзэры, каб яго рэалізаваць. Іншы спосаб знайсці працэс даецца .

3
дададзена

гэта азначае, што ваш файл працуе ў цяперашні час. проста ўвядзіце ніжэй код і паспрабуйце яшчэ раз:

sudo pkill node
2
дададзена

У-для таго, каб выправіць гэта, спыніць ці зачыніць сервер вы працуеце. Калі вы карыстаецеся IDE Eclipse, а затым ісці за гэтым,

Run > Debug

enter image description here

Пстрыкніце правай кнопкай мышы на запушчаны працэс і націсніце на кнопку <�моцны> Перапыніць .

1
дададзена

Калі вы спрабавалі забіць ўсе асобнікі вузлоў і іншыя службы праслухоўванне на 3000 (па змаўчанні выкарыстоўваецца экспрэс-ўстаноўка шкілета) не далі ніякіх вынікаў, вы павінны праверыць, каб пераканацца, што асяроддзе не з'яўляецца вызначальнай «портам», каб быць нешта нечаканае. У адваротным выпадку, вы, верагодна, атрымаць тую ж памылку. У app.js кур'ерскага шкілета файл вы ўбачыце радок 15:

app.set('port', process.env.PORT || 3000);
1
дададзена

Проста зменіце свой порт, можа быць ваш бягучы порт выкарыстоўваецца ИРИО ці якой-небудзь іншы сервер.

1
дададзена
Гэта было зададзена пытанне і адказаў 4 гады таму з тым жа, але лепшым адказам.
дададзена аўтар George, крыніца

Калі вы хочаце выкарыстоўваць адзін і той жа нумар порта, затым увядзіце забіць% у тэрмінале, які забівае бягучы фонавы працэс і вызваляе порт для далейшага выкарыстання.

1
дададзена

Вы таксама можаце змяніць порт ад Gruntfile.js і запусціць зноў.

0
дададзена

Спыніць службу, якая выкарыстоўвае гэты порт.

sudo service NAMEOFSERVICE stop
0
дададзена

У маім выпадку я павінен быў бегчы вандроўнага релоад а. Нават пры адсутнасці вузлоў працэсаў не працуюць мой экспрэс-прыкладанні ў маёй віртуальнай машыне я яшчэ атрымліваю гэтую памылку перазагружаныя вандроўнага вокны.

0
дададзена

Зачыніце ўсе іншыя серверы вузлоў, якія працуюць, нават калі яны знаходзяцца ў іншых тэрмінальных вокнах або працуюць на розных партах. Гэта павінна вырашыць праблему.

0
дададзена

У маім выпадку праблема была выкліканая забыванне выклікаць наступны() у якасці expressjs `выкарыстоўваць» выклік метаду.

<�Р> Калі ток прамежкавага пласта не сканчаецца цыкл запыту-адказу, ён павінен выклікаць наступны (), каб перадаць кіраванне наступнай прамежкавага пласта, у адваротным выпадку запыт будзе павіс.

http://expressjs.com/guide/using-middleware.html

0
дададзена

Гэта працуе для мяне.

http://www.codingdefined.com/2015 /09/how-to-solve-nodejs-error-listen.html

Проста зменіце нумар порта з уласцівасцяў праекта.

0
дададзена

Забіўшы жа працэс некалькі разоў, і не будучы ў стане знайсці, што яшчэ працуе на порт 8000, я зразумеў, што я спрабаваў працаваць на порце 8000 двойчы:

Перад тым:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port,() => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});
app.listen(port,() => {
  console.log("We are live on " + port);
});

Пасля таго, як:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port,() => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});
0
дададзена

У мяне была такая ж праблема, і я даведаўся, што nodejs працэс, які я раней адменены з CTRL + C па-ранейшаму працуе. Праблема ў Windows 10 ёсць, што Ctrl + C ня забівае Вытанчана nodejs. Я адкрыў дыспетчар задач і ўручную забіў працэс. Рашэнні, прапанаваныя на GitHub не працуе для мяне.

0
дададзена