节点EADDRINUSE错误 - 真正的解决方案?

时间:2018-03-12 20:24:26

标签: node.js port nodemon

我在ubuntu上运行节点,并且我一直收到"错误打开端口:8080 ...",EADDRINUSE错误。

我基本上理解问题是什么,但是当我搜索搜索解决方案时,我基本上会讨论杀死进程的最佳方法。另一件事是人们说你需要使用 ctrl + c 而不是 ctrl + z - 这是不是问题,因为我总是使用 ctrl + c ,即使nodemon重新启动服务器,我也会收到此错误。

这有真正的解决方案吗?每次必须杀死这个过程都是笨拙和丑陋的。另外,我必须每小时做20次。更糟糕的是,当我杀死这个过程时,这有时会杀死我的邮差。

那么,是否有 真正的 解决方案。按优先顺序排列:

  1. 有没有办法防止这种情况发生?为什么节点或nodemon不会终止它正在运行的进程?

  2. 有没有问题(在我的节点服务器中)告诉它在服务器崩溃/退出之前终止进程?

  3. 在开始侦听端口之前,有没有办法杀死我服务器中的现有进程?我不喜欢这个解决方案,但是每次用锤子敲击端口更好,所以我可以让它工作。

  4. 编辑:

    这是错误:

    error opening port: 8080
    { Error: listen EADDRINUSE :::8080
        at Object._errnoException (util.js:1022:11)
        at _exceptionWithHostPort (util.js:1044:20)
        at Server.setupListenHandle [as _listen2] (net.js:1351:14)
        at listenInCluster (net.js:1392:12)
        at Server.listen (net.js:1476:7)
        at Function.listen (/home/ksjazzguitar/Programming/test/jwt5/server/node_modules/express/lib/application.js:618:24)
        at Object.<anonymous> (/home/ksjazzguitar/Programming/test/jwt5/server/server.js:46:5)
        at Module._compile (module.js:643:30)
        at Object.Module._extensions..js (module.js:654:10)
        at Module.load (module.js:556:32)
        at tryModuleLoad (module.js:499:12)
        at Function.Module._load (module.js:491:3)
        at Function.Module.runMain (module.js:684:10)
        at startup (bootstrap_node.js:187:16)
        at bootstrap_node.js:608:3
      code: 'EADDRINUSE',
      errno: 'EADDRINUSE',
      syscall: 'listen',
      address: '::',
      port: 8080 }
    

3 个答案:

答案 0 :(得分:0)

回答3和2

3)您可以使用此

终止该过程
# where 8080 is your port
sudo kill <(sudo lsof | grep 'TCP \*:8080 (LISTEN)' | awk '{print $2}' | sort -u)

2)创建一个bash脚本,其中包含3)然后启动应用程序的命令,如

sudo kill <(sudo lsof | grep 'TCP \*:8080 (LISTEN)' | awk '{print $2}' | sort -u)
npm start

然后使用该脚本启动您的应用程序

答案 1 :(得分:0)

在我的一个Node服务器中,我添加了这个:

const processExitHandler = async (error) => {
  await this.destroy();
  if(error) console.log(error);
  process.exit(error ? 1 : 0);
};

process.on('exit', processExitHandler);
process.on('SIGINT', processExitHandler); // Catches ctrl+c
process.on('SIGUSR1', processExitHandler); // SIGUSR1 and SIGUSR2 are for `kill pid` (ex: nodemon restart)
process.on('SIGUSR2', processExitHandler);
process.on('uncaughtException', processExitHandler);

this.destroy停止了网络服务器和数据库连接。

这是我用于编译/重新启动更改的监视脚本:

"watch:build": "babel src --out-dir lib --source-maps --watch",
"watch:run": "nodemon lib/index.js",
"watch": "npm run watch:build & (sleep 1 && npm run watch:run)",

答案 2 :(得分:0)

我只是在我的pkg.json中添加了标记--delay 1500ms,它就可以了。

import pandas as pd

# TODO: Set weight1, weight2, and bias
weight1 = -2.5
weight2 = -1.5
bias = 1.0

# DON'T CHANGE ANYTHING BELOW
# Inputs and outputs
test_inputs = [(0, 0), (0, 1), (1, 0), (1, 1)]
correct_outputs = [True, False, True, False]
outputs = []

# Generate and check output
for test_input, correct_output in zip(test_inputs, correct_outputs):
    linear_combination = weight1 * test_input[0] + weight2 * test_input[1] + bias
    output = int(linear_combination >= 0)
    is_correct_string = 'Yes' if output == correct_output else 'No'
    outputs.append([test_input[0], test_input[1], linear_combination, output, is_correct_string])

# Print output
num_wrong = len([output[4] for output in outputs if output[4] == 'No'])
output_frame = pd.DataFrame(outputs, columns=['Input 1', '  Input 2', '  Linear Combination', '  Activation Output', '  Is Correct'])
if not num_wrong:
    print('Nice!  You got it all correct.\n')
else:
    print('You got {} wrong.  Keep trying!\n'.format(num_wrong))
print(output_frame.to_string(index=False))