重新启动Node.Js应用程序时抛出EADDRINUSE错误

时间:2016-02-25 10:48:08

标签: node.js rest

我知道我的问题是重复的。在标记为重复或任何内容之前,请完整阅读该问题。

我正在学习node.js来创建rest 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      

2 个答案:

答案 0 :(得分:1)

您的问题是该节点已在端口8080上运行。这由netstat / lsof命令返回的第一行显示。杀死进程将允许您重新启动节点进程。您可以使用命令

在Mac上执行此操作
killall node

其中node是进程的名称。

答案 1 :(得分:1)

节点已在您的计算机上运行。

在终端中,找到正在运行的节点进程
ps -ax | grep node

这将返回正在运行的节点进程列表。生成的进程列表中的第一列是进程ID(pid)。

使用终止正在运行的节点进程 kill -9 <pid>

这将终止节点进程并释放端口以便您运行服务器。

相关问题