我有一个简单的服务器运行在node.js使用连接:
var server = require('connect').createServer();
//actions...
server.listen(3000);
在我的代码中,我有实际的处理程序,但这是基本的思想。我一直遇到的问题是
EADDRINUSE, Address already in use
我收到这个错误时再次运行我的应用程序后,它以前崩溃或错误。因为我没有打开一个新的终端实例,所以我用ctr + z关闭了这个进程。
我非常确定我所要做的就是关闭服务器或连接。我尝试在进程中调用server.close()。(“退出”,…);运气不好。
Win10, git bash v2.15, node v8.9.1, npm v5.5.1
我有一个包裹。Json脚本启动节点:"start": "node index.js"
无论何时我使用它,不管我是否用ctrl+c杀死它,我都遇到了这个问题。
如果我只是从git bash运行node index.js而不是npm run start并用ctrl+c杀死,我永远不会得到这个错误。
我不知道为什么,但我想这可能会帮助到一些人。
你可能会遇到这样的情况,即使杀死线程或进程也不会真正终止应用程序(我在Linux和Windows上每隔一段时间就会遇到这种情况)。有时,您可能已经有一个正在运行的实例,但没有关闭。
由于这些情况,我更喜欢在package.json中添加:
"scripts": {
"stop-win": "Taskkill /IM node.exe /F",
"stop-linux": "killall node"
},
然后我可以调用它们使用:
npm run stop-win
npm run stop-Linux
如果您愿意,还可以让这些BIN命令带有参数标志。您还可以将它们添加为在try-catch子句中执行的命令。
我也有同样的问题,但我发现这不是恶魔的问题。首先,我使用这个脚本开始我的过程:
{"dev": "nodemon -r dotenv/config app.js"}
应用程序可以正确启动,但只要任何文件改变,nodemon就不能重新启动它。与此同时,应用程序仍在后台继续运行。如果我按Ctrl+C,它退出,但端口3000上没有更多的进程,所以通过端口fuser -k 3000/tcp杀死它没有任何作用。
并且,我在app.js文件中使用。env端口。
const port = process.env.PORT || 3000;
因此,我只将端口值更改为3000,它就工作了。
const port = 3000;
我不得不找到另一种方法来加载.env文件,但这解决了我的问题。希望这能有所帮助。
我还有另一个问题。我已经申报了两次港口。不要再犯那个错误了。
app.listen(port, function () {
console.log('Example app listening on port')
})
app.listen(3000, function() {
console.log("Server started on port 3000");
});
而是这样做:
const port = 3000;
app.listen(port, function () {
console.log('Example app listening on port')
})