问题描述
我最近关注了video chat tutorial,并希望将其托管在Digitalocean上以测试一些webRTC内容。我开始使用它,甚至将其托管在Heroku上。但是,当我将其托管在未使用的Droplet(最初的$ 100免费Digitalocean信用运行)并通过SSH进入我的Droplet并运行npm start
(是的,尽管不在教程github代码{{1中}} {strong>是npm start
中的),我收到了错误消息。
package.json
我已经读过read this related question,并尝试了很多东西,例如在运行USER***@nodejs-s-1vcpu-1gb-sfo2-01:~/DIRNAME$ sudo npm start
> livestream-server@0.0.1 start /home/USER***/DIRNAME
> node app.js
events.js:292
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (net.js:1313:16)
at listenInCluster (net.js:1361:12)
at Server.listen (net.js:1447:7)
at Object.<anonymous> (/home/USER***/ZMP_Solutions/app.js:17:8)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1340:8)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
code: 'EADDRINUSE',errno: 'EADDRINUSE',syscall: 'listen',address: '::',port: 3000
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! livestream-server@0.0.1 start: `node app.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the livestream-server@0.0.1 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
时使用sudo
,或将端口设置为高于3000,但无济于事。有解决办法吗?
谢谢!
解决方法
不设置端口或更高。因为heroku或数字海洋将动态分配端口(任何可用的端口)
const server = require('http').createServer();
const port = process.env.PORT || 3000;
server.listen(port,() => console.log(`Listening on ${port}`));
,
这意味着您已经有一个使用端口3000的应用程序。也许是同一服务器的实例。
您可以按照以下步骤关闭其他过程:
sudo netstat -lntp | grep 3000
查找使用端口3000的进程。获取该进程的PID(进程ID)。 PID是在输出中像PID/ProcessName
像234/node
这样写的数字,其中234是PID。在以下命令中使用它:
sudo kill -9 PID
填写找到的PID。
现在,您可以正常运行服务器,并且不会再出现该错误。
,此问题实际上与Digitalocean上的防火墙有关。我所做的只是运行sudo ufw disable
,它确实有效!