ExpressJS-抛出ER未处理的错误事件

我使用以下命令创建了ExpressJS应用程序:

express -e folderName
npm install ejs --save
npm install

当我以:node app.js运行应用程序时,出现以下错误:

events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at errnoException (net.js:884:11)
at Server._listen2 (net.js:1022:14)
at listen (net.js:1044:10)
at Server.listen (net.js:1110:5)
at Object.<anonymous> (folderName/app.js:33:24)
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)
at Function.Module.runMain (module.js:497:10)

如何修复它?

330311 次浏览

您必须使用相同的端口(如8080)运行另一台服务器。

您可能在其他Shell中运行了node app,请将其关闭并重新运行。

您可以检查端口号。可用或未使用

netstat -tulnp | grep <port no>

或者,您可以使用LSOF

lsof -i :<port no>

关闭正在运行的任何其他节点服务器,即使它们在其他终端窗口中或在不同的端口上运行。这应该能解决问题。

当我们有时运行我们的Express应用程序时,

我们确实会遇到类似的错误。在这种情况下,我们必须遵循同样的原则。我们需要检查它是否在任何终端中运行。 如果要查找并终止进程,请按照下列步骤操作:

  • PS AUX|GREP节点
  • 查找进程ID(左起第二个):
  • KILL-9过程_ID

或者

使用单个命令关闭所有正在运行的节点进程。

ps aux | awk '/node/{print $2}' | xargs kill -9

如果您已尝试终止所有节点实例和侦听3000(Express Skeleton Setup使用的默认值)的其他服务,但没有成功,则应检查以确保您的环境没有将“端口”定义为意外的内容。否则,您可能会得到相同的错误。在Express Skeleton的app.JS文件中,您会注意到第15行:

app.set('port', process.env.PORT || 3000);

要解决此问题,请终止或关闭正在运行的服务器。 如果您使用的是Eclipse IDE,那么请遵循以下步骤,

运行>;调试

enter image description here

右键单击正在运行的进程,然后单击终止

在我的例子中,我还必须运行vagrant reload。即使没有节点进程在我的虚拟机中运行我的Express应用程序,我仍然会收到这个错误,直到重新加载Vagrant Box.

我通过更改端口修复了这个错误。

app.set('port', process.env.PORT || 3000);<br>

并改为:

app.set('port', process.env.PORT || 8080);<br>

如果您使用的是Linux,那么如果NodeJS不是以root身份运行,也会出现此问题。

由此改变:

nodejs /path/to/script.js

对此:

sudo nodejs /path/to/script.js

只是发生在我身上,这里的其他建议都没有解决它。幸运的是,我记得前几天以root用户身份运行时,脚本正在运行。希望这对某人有所帮助!

免责声明:,这可能不是生产环境的最佳解决方案。以root用户身份启动服务可能会给服务器/应用程序带来一些安全漏洞。在我的例子中,这是一个本地服务的解决方案,但我鼓励其他人花更多的时间来尝试隔离原因。

停止正在使用该端口的服务。

sudo service NAMEOFSERVICE stop

在我的例子中,这个问题是由于忘记在ExpressJS “ use ”方法调用中调用next()引起的。

如果当前中间件没有结束请求-响应循环,则必须调用next()将控制权传递给下一个中间件,否则请求将被挂起。

http://expressjs.com/guide/using-middleware.html.

节点尝试使用的端口可能已被其他程序使用。在我的例子中,它是恩托普,这是我最近安装的。我必须在浏览器中打开http://localhost:3000/才能实现它。找到该过程的另一种方法是给出在这里

实例可能仍在运行。 这会解决的。

killall node

更新:此命令仅适用于Linux/Ubuntu&;麦克。

这对我很有效。

http://www.codingdefined.com/2015/09/how-to-solve-nodejs-error-listen.html.

只需从项目属性中更改端口号。

只需更改您的端口,可能是您当前的端口正在由IIS或其他服务器使用。

这是因为您用于运行脚本的端口已在使用中。 您必须停止正在使用该POST的所有其他节点。 为此,您可以通过以下方式检查所有节点

ps -e
或者对于

节点进程,仅使用ps -ef | grep node 这将为您提供具有ID的所有节点进程的列表

终止所有节点进程

sudo killall -9 node

或者对于特定IDsudo kill -9 id

如果要使用相同的端口号,请在终端中键入kill %,这将终止当前的后台进程并释放端口以供将来使用。

您也可以从grunt file.JS更改端口并再次运行。

在多次终止同一进程并且无法找到在端口8000上运行的其他进程后,我意识到我试图在端口8000上运行两次:

之前:

MongoClient.connect(db.url, (err, database) => {
if (err) return console.log(err);
require('./app/routes')(app, database);


app.listen(port, () => {
console.log('We are live on ' + port);
});
});


require('./app/routes')(app, {});
app.listen(port, () => {
console.log("We are live on " + port);
});

之后:

MongoClient.connect(db.url, (err, database) => {
if (err) return console.log(err);
require('./app/routes')(app, database);


app.listen(port, () => {
console.log('We are live on ' + port);
});
});


require('./app/routes')(app, {});

我遇到了同样的问题,我发现我之前用Ctrl+C取消的NodeJS进程仍在运行。Windows 10中的问题是,Ctrl+C不会优雅地杀人。 NodeJS.我打开了任务管理器并手动终止了该进程。Github上提供的解决方案对我不起作用。

这意味着您的文件现在正在运行。只需输入以下代码并重试:

sudo pkill node

如果您使用Windows,则可以从Node.JS的任务管理器结束进程

尝试以下修复。

  1. 尝试关闭正在使用您的端口的进程。

    netstat -tulnp | grep <port_number>

  2. 安装下面的PakCage为我永远解决了这个问题。

    npm install ws@3.3.2 --save-dev --save-exact

  3. 在终端中

    运行以下命令:

    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

    对于Arch Linux,将此行添加到/etc/sysctl.d/99-sysctl.conf:

    fs.inotify.max_user_watches=524288

    然后执行:

    sysctl --system

    这也将在重新启动期间持续存在。

    https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details

events.JS:183扔er;//未处理的“错误”事件

我也遇到了同样的问题,尝试了很多方法,但最终还是得到了这个,这个效果很好:

npm install ws@3.3.2 --save-dev --save-exact

https://github.com/ionic-team/ionic-cli/issues/2922,请参阅此链接以了解更多说明

没有一个答案对我有用。

当我重新启动计算机时,我可以让服务器启动并运行。

麦克
shutdown now -r

Linux
sudo shutdown now -r

实际上,Ctrl+C键不释放节点进程使用的端口。所以有这个错误。 该问题的解决方案是在server.JS中使用以下代码片段:

process.on('SIGINT', function() {
console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
// some other closing procedures go here
process.exit(1);
});

这对我很有效。

您还可以查看NodeJS中的正常关闭中提到的其他解决方案

->检查端口8080上运行的内容或您想要检查的任何端口

lsof -i @localhost:8080

如果有些东西正在运行,你可以关闭它或使用一些杀死命令来关闭它。

很简单,只需在VisualStudio代码中检查您的终端。 因为我正在运行我的节点应用程序,我休眠了我的笔记本电脑,然后第二天早上,我打开我的笔记本电脑,重新开发软件。然后我再次运行命令nodemon app.JS 第一个是夜间运行的WAAS,第二个是运行我最新的命令,因此两个命令提示符正在侦听相同的端口,这就是您遇到此问题的原因。 只需关闭一个终端或所有终端,然后运行您的节点app.JS

或nodemon app.JS

此错误的原因

其他一些进程已在您指定的端口上运行

简单快捷的解决方案

例如,在Linux操作系统上,您指定3000作为端口

  • 打开终端并运行lsof -i :3000。如果任何进程已在端口3000上运行,则您将在控制台上看到此打印

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    16615 aegon   13u  IPv6 183768      0t0  TCP *:3000 (LISTEN)

  • 从输出中复制PID(进程ID

  • 运行sudo kill -9 16615(必须将PID置于-9之后)

  • 再次启动服务器

NPM install--save--save-exact react-scripts@2.1。

您正在侦听的端口已被另一个进程侦听。

当我遇到这个错误时,我使用Windows PowerShell终止了该进程(因为我使用的是Windows)。

  1. 列表项打开Windows PowerShell
  2. 输入ps,然后就可以得到进程列表。
  3. 找到名为节点的进程,并注意身份证
  4. 键入Stop-process <Id> 我认为这是对Windows用户
  5. 的帮助。

我今天遇到了同样的问题,端口没有使用。以下方法有所帮助:

rm -rf node_modules && npm cache clean && npm install
npm start

如果是在Mac中,那么这一切都与x86_64-Apple-Darwin13.4.0的IP有关。如果您跟踪错误,则可能与x86_64-Apple-Darwin13.4.0有关。加

127.0.0.1 x86_64-Apple-Darwin13.4.0

/etc/hosts文件。然后问题就解决了。

我的答案是解决方案之一

如果您尝试使用以下命令运行角度应用程序

ng serve --open

--open在默认浏览器中打开此标记导致问题的URL.我不知道在Angular 10版本不工作后的目的是什么。我还在分析。

在Windows上:

命令1:lsof-I:<;端口号>;

这将给出进程ID

命令2:杀死-9<;进程ID>;

完成了