NodeJS 出错

Posted

技术标签:

【中文标题】NodeJS 出错【英文标题】:Error with NodeJS 【发布时间】:2016-09-07 03:03:28 【问题描述】:

当我尝试运行我的脚本时出现此错误。

 [Error: listen EADDRINUSE :::8000]
  code: 'EADDRINUSE',
  errno: 'EADDRINUSE',
  syscall: 'listen',
  address: '::',
  port: 8000 
Error: listen EADDRINUSE :::8000
    at Object.exports._errnoException (util.js:890:11)
    at exports._exceptionWithHostPort (util.js:913:20)
    at Server._listen2 (net.js:1234:14)
    at listen (net.js:1270:10)
    at Server.listen (net.js:1366:5)
    at Server.listen.Server.attach (/usr/lib/node_modules/socket.io/lib/index.js:216:9)
    at Timeout._onTimeout (/var/www/html/Bot/site.js:618:29)
    at tryOnTimeout (timers.js:224:11)
    at Timer.listOnTimeout (timers.js:198:5)

Script.js 约 605 行

function load() 
    query('SET NAMES utf8');
    query('SELECT `id` FROM `rolls` ORDER BY `id` DESC LIMIT 1', function(err, row) 
        if((err) || (!row.length)) 
            logger.error('Cant get number from the last game');
            logger.debug(err);
            process.exit(0);
            return;
        
        currentRollid = row[0].id;
        logger.trace('Roll '+currentRollid);
    );
    loadHistory();
    setTimeout(function()  io.listen(8080); , 3000);

618行是

setTimeout(function()  io.listen(8080); , 3000);

我该如何解决这个问题?我尝试更改 io.listen 端口,但它仍然不起作用。

【问题讨论】:

杀掉当前监听8000端口的进程或者换成空闲端口。参见***.com/q/9898372/218196。 我怎样才能杀死这个进程? 【参考方案1】:

首先,您应该知道EADDRINUSE 错误会在您尝试侦听的端口已在使用中时引发。

要解决此问题,您需要释放应用程序尝试侦听的端口(如果您使用的是 Linux,也许您会发现 this *** thread 很有用)。

在 NodeJS 中创建服务器时,通常最好监听 [进程] 退出事件,这样您就可以关闭服务器,从而释放它正在监听的端口。

这里有一些很棒的文档,提供了有关在 NodeJS 进程终止之前可以触发的不同事件的信息:

process_event_exit process_event_uncaughtexception process_signal_events

根据您提供的 sn-ps,我假设您正在使用 SocketIO。

This *** answer 给出了一个很好的例子来说明如何关闭一个 SocketIO 服务器。

【讨论】:

以上是关于NodeJS 出错的主要内容,如果未能解决你的问题,请参考以下文章

通过 nodejs 安装 Express 时出错

部署到弹性 beantalk 时出错 - 未知作业:nodejs

MySQLx 尝试解析表达式时出错(Nodejs)

NodeJs - 使用 fs.createReadStream 读取文件时出错

NodeJs Azure Mysql 连接时出错

使用 multer 和 nodejs 将图像上传到谷歌云存储时出错