Node.js express socket.io порт 3000 в использовании

Я следил за этим (http://socket.io/get-started/chat/) учебником о том, как сделать простое приложение чата с помощью socket.io.

Я попытался использовать Express для его создания, и мне было интересно, почему порт 3000 уже используется? Код ниже не будет работать, если я не изменю номер порта.

/* Make the http server listen on port 3000. */
http.listen(3000, function(){
 console.log('listening on *:3000');
});

Является ли использование порта для выполнения других действий, таких как маршрутизация или что-то еще? Есть ли простой способ найти, что происходит на этом порту?

Я также могу делать что-то хитрое с моими требованиями:

var express = require('express');
var app = require('express')();
var http = require('http').Server(app);
var router = express.Router();
var io = require('socket.io')(http);

Спасибо.

Ответ 1

Я тоже столкнулся с этой проблемой, и я решил это:

Не используйте npm start для запуска своего веб-приложения

Используйте node app.js вместо

Ответ 2

Попробуйте запустить:

netstat -anp tcp | grep 3000

Это должно показать вам имя процесса, использующего порт 3000. Здесь другая проблема в StackOverflow, которая охватывает эту проблему более подробно.

Ответ 3

Один из лучших способов сделать это во время разработки - через IDE, где вы сможете выполнить всестороннюю отладку и выполнить код.

Если вы используете WebStorm, это работает. Из конфигураций запуска → Изменить конфигурации → Nods.js и добавьте app.js в качестве параметра node. Более подробную информацию см. Ниже в скриншотах.

введите описание изображения здесь

Ответ 4

Я решил эту же проблему с помощью экспресс-приложения:

  • Отредактируйте файл "yourap/bin/www"
  • найдите строку:

    var port = normalizePort (process.env.PORT || '3000');

  • замените его на:

    var port = normalizePort ('XXXX');

где XXXX - номер порта, который вы хотите использовать

Тогда вы можете сделать npm start! XD

Ответ 5

У меня (забыл, что у меня был) ранее установленный ntop, который по умолчанию также использует порт 3000, и поэтому получил такая же ошибка, как описано здесь.

Как упоминалось выше, используйте netstat или lsof, чтобы найти службу-нарушитель (и префикс команды sudo, чтобы получить правильное имя процесса):

sudo lsof -P | grep ':3000'

- или -

sudo netstat -anp tcp | grep 3000

В Ubuntu служба отключена с помощью (просто):

service ntop stop

Ответ 6

Как и ответ выше, чтобы не использовать npm start.

Я использовал nodemon и с expressjs и expressjs-генератором. Я использовал nodemon для npm start, в то время как npm начинает сам выполнять node./NodeApp/bin/www

Поэтому я редактировал, чтобы nodemon выполнял node./NodeApp/bin/www сам по себе, и эта ошибка исчезла.

Заключение

До

package.json

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node ./NodeApp/bin/www",
    "build": "webpack --watch",
    "dev": "nodemon --exec npm start"
},

После

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --watch",
    "dev": "nodemon --exec node ./NodeApp/bin/www"
},

Итак, теперь я запускаю свой раздел с npm run dev и больше ошибок.

Ответ 7

для меня помогает использовать 3000 || 3333 3000 || 3333, и он исправляет проблему