我已经在一个node.js项目上工作了几个星期,它一直工作得很好。通常,我使用npm start来运行我的应用程序,并在localhost上的浏览器中查看它,端口3000。
今天,我在使用npm start时开始得到以下错误:
Server started on port 3000
Port 3000 is already in use
我已经检查了资源监视器,我没有在端口3000上运行其他进程。我为什么会得到这个错误消息?
在我的app.js中,我有以下代码来设置端口…这是错误的吗?它以前工作得很好,所以我不确定我做错了什么。
// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
console.log('Server started on port '+app.get('port'));
});
谢谢你的帮助!
编辑:
我已经尝试运行netstat和TCPView来检查哪个进程正在使用该端口,但是没有使用该端口。我也尝试重新启动我的笔记本电脑,但我仍然得到同样的错误。
我在NodeJS上使用nodemon快速服务器。
我收到以下消息,这似乎是一个错误:
$ node ./bin/www
Port 3000 is already in use
有一个通用的解决方案,如果您终止所有节点服务器连接,则可以在包中添加此代码。json文件:
"scripts": {
"start": "node ./bin/www",
"stop": "taskkill -f -im node.exe"
},
此外,我还找到了几个解决方案,windows命令和bash在win10 x64。
我所有的笔记都在这里:
#终止所有NodeJS服务器连接
$ taskkill -f -im node.exe
SUCCESS: The process "node.exe" with PID 14380 has been terminated.
SUCCESS: The process "node.exe" with PID 18364 has been terminated.
SUCCESS: The process "node.exe" with PID 18656 has been terminated.
#示例:打开Windows任务管理器,查看Windows上的“node.exe”PID编号
>> Command Line
$ netstat /?
$ netstat -a -n -o
$ netstat -ano
#根据端口号杀死Windows进程(示例)
寻求帮助:
$ taskkill /?
$ tskill /?
代码1:
$ taskkill -pid 14228
ERROR: The process with PID 14228 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option).
代码2:
$ taskkill -f -pid 14228
SUCCESS: The process with PID 14228 has been terminated.
代码3:
$ tskill 14228
#查看特定端口的命令行
在cmd:
$ netstat -ano | find "14228"
在bash中:
$ netstat -ano | grep "14228" or $ netstat -ano | grep 14228
使用tasklist命令找到node.exe
在cmd:
$ tasklist | find "node"
在bash中:
$ tasklist | grep node
$ tasklist | grep node.exe
node.exe 14228 Console 2 48,156 K
node.exe 15236 Console 2 24,776 K
node.exe 19364 Console 2 24,428 K
我最近在win10上遇到了一个奇怪的端口问题,无法在端口8080上启动服务器进程监听,我把它改成了18080,然后它就工作了,但过了一段时间,同样的问题又出现了。
但是我找不到任何进程使用端口,我已经尝试了currpots和netstat,没有一个工作,我尝试了开放端口
python -m http.server 18080
python -m http.server 18081
python -m http.server 18082
python -m http.server 18083
python -m http.server 18084
...
,大多数人说类似的信息“端口已经在使用”
幸运的是,我找到了原因。通过
netsh interface ipv4 show excludedportrange protocol=tcp
可以看出有些端口是排除使用的,通过这些端口没有打开和监听。
并通过
net stop winnat
大多数排除端口被释放,这些端口可以使用。