2016-02-25 4 views
1

Я знаю, что мой вопрос повторяется. Пожалуйста, прочитайте вопрос полностью, прежде чем отмечать его как дубликат или что-то еще.При перезапуске приложения Node.Js вызывает ошибку EADDRINUSE

Я изучаю node.js для создания отдыха api &, отлично справляясь с этим. Все шло гладко, пока я не нашел эту ошибку (EADDRINUSE) при перезагрузке приложения. Этот вопрос есть мои драгоценные часы, но все еще не в состоянии найти правильное решение.

Если приложение работает в первый раз, он запускается плавно с любым изменением порта по какой-либо причине, мы останавливаем или перезапускаем это сообщение об ошибке, когда оно выдается с сервера. Многие из них предложили просто изменить порт, все работает нормально, и я согласен с ними. Но когда сервер работает &, который используется по всему миру, вы не можете изменить порт для перезапуска.

Добавление фрагмента моего кода.

app.js

var express = require('express');  // call express 
var app  = express();     // define our app using express 
var bodyParser = require('body-parser'); 

var config = require('./Config/config.js'); 
var api = require('./apis/api'); 

// configure app to use bodyParser() 
// this will let us get the data from a POST 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 


// ROUTES FOR OUR API 
// ============================================================================= 
var router = express.Router();    // get an instance of the express Router 

app.all('/api/write/'+config.WRITE_API_VERSION+'/:apiName', function (req, res) { 

    api.handle.apply(null, ['write', req.method.toLowerCase(), req.params.apiName, req, res]); 
    console.log("in api end1"+req.body); 

}); 

app.all('/api/read/'+config.READ_API_VERSION+'/:apiName', function (req, res) { 


    api.handle.apply(null, ['read', req.method.toLowerCase(), req.params.apiName, req, res]); 
    console.log("in api end2"); 

}); 

app.use(function (req, res, next) { 
    res.contentType('application/json'); 
    next(); 
}); 


// more routes for our API will happen here 

// REGISTER OUR ROUTES ------------------------------- 
// all of our routes will be prefixed with /api 
app.use('/api', router); 

// START THE SERVER 
// ============================================================================= 
app.listen(config.PORT); 
console.log('Magic happens on port ' + config.PORT); 

config.js

var configs = { 
    ENVIRONMENT: "development", 
    READ_API_VERSION: "v1.0", 
    WRITE_API_VERSION: "v1.0", 

    PORT: 8080 
} 

Object.freeze(configs); 
module.exports = configs; 

Package.json

"scripts": { 
"start": "node app.js" 
    } 

Сообщение об ошибке

node app.js 
Magic happens on port 8080 
events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: listen EADDRINUSE 
    at errnoException (net.js:901:11) 
    at Server._listen2 (net.js:1039:14) 
    at listen (net.js:1061:10) 
    at Server.listen (net.js:1135:5) 
    at EventEmitter.listen (/home/ubuntu/vcare_backend/VCare/node_modules/express/lib/application.js:617:24) 
    at Object.<anonymous> (/home/ubuntu/vcare_backend/VCare/app.js:47:5) 
    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) 

После выполнения команды Sudo NetStat -plnt

Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name 
tcp  0  0 0.0.0.0:8080   0.0.0.0:*    LISTEN  3277/node  
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  1073/sshd  
tcp6  0  0 :::22     :::*     LISTEN  1073/sshd  
+0

Что происходит на линии 47 app.js? –

+0

Как вы начинаете заявку? –

+0

@AdrianLynch, запустив узел app.js command @ line 47, прослушивает порт 8080 – Anand

ответ

1

Ваш вопрос в том, что узел уже работает на порту 8080. Это показано в первой строке, возвращаемой NetStat/Lsof команды. Убив процесс, вы сможете перезапустить процесс узла. Вы можете сделать это на mac с помощью команды

killall node 

Где узел - это имя процесса.

1

Узел уже запущен на вашем компьютере.

В терминале, найдите процесс, протекающий узел с
ps -ax | grep node

Это будет возвращать список запущенных процессов узлов. Первый столбец в результирующем списке процессов - это идентификатор процесса (pid).

убить процесс узел работает с
kill -9 <pid>

Этот процесс будет завершён узел и освободить порт для вас, чтобы запустить сервер.

Смежные вопросы