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 出错的主要内容,如果未能解决你的问题,请参考以下文章
部署到弹性 beantalk 时出错 - 未知作业:nodejs