我已经在一个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

其他回答

今天我在Windows上就遇到了这种情况。我重新启动了我的计算机,并检查了端口3000上没有任何东西,它不是。

我试着用3001,3005也有同样的效果。

最后我搬到了8881,现在能用了。

对我来说唯一改变的是安装windows更新和更新源地图资源管理器。因为这也发生在其他应用程序,它要么与网络风暴或窗口。我猜端口可能被锁定了,但88XX范围内的端口没有。

我已经解决了这个问题,因为MongoDB或有另一个应用程序,你之前在这个端口上运行它, 为了解决这个问题,从任务管理器中关闭进程, 或者将端口的编号从3000更改为任何其他端口。

你可以使用kill-port。首先,关闭现有端口,然后创建服务器并监听。

const kill = require('kill-port')

kill(port, 'tcp')
    .then((d) => {
        /**
     * Create HTTP server.
     */
        server = http.createServer(app);

        server.listen(port, () => {
            console.log(`api running on port:${port}`);
        });
    })
    .catch((e) => {
        console.error(e);
    }) 

杀死所有运行的端口(mac):

killall node

这很简单。你可以用2个简单的步骤来修复它。

如果有名为“PORT”的键/项,请检查环境变量。 如果发现,删除该条目或将其重命名为其他内容。

结果是其他程序在使用这个变量。通常当你启动react-scripts时,它会寻找一个标题为PORT的环境变量。