我正在使用linux mint 19.02。编写了一个简单的服务器。

const http = require('http');
const express = require('express');
const dotenv = require('dotenv').config();

const app = express();
const server = http.createServer(app);
const port = process.env.PORT // 8081;

app.get('/', (req, res) => {
    res.send('Hello world!!!');
});


这是我的package.json文件。

{
  "name": "matel",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node src/index.js",
    "dev": "nodemon src/index.js"
  },
  ...
  "license": "ISC",
  "dependencies": {
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "nodemon": "^1.19.4"
  }
}


当我使用npm run dev命令启动服务器时,出现错误。通过单击浏览器中的链接http://localhost:8081/,我也得到一个错误(逻辑)。


  events.js:187 throw er; //未处理的“错误”事件^
  
  错误:监听EADDRINUSE:Server.listen(net.js :)在Server.setupListenHandle处已使用的地址::: 8081 [在_listen2](net.js:1300:14)在listenInCluster(net.js:1348:12) 1436:7)。 (/home/user/projects/matel/src/index.js:13:8)在Object.Module._extensions..js(内部)在Module._compile(内部/modules/cjs/loader.js:956:30) /modules/cjs/loader.js:973:10)在Module.load(internal / modules / cjs / loader.js:812:32)在Function.Module._load(internal / modules / cjs / loader.js:724) :14)在Function.Module.runMain(internal / modules / cjs / loader.js:1025:10)在internal / main / run_main_module.js:17:11在Server实例上在'emitErrorNT(net .js:1327:8)位于processTicksAndRejections(内部/进程/task_queues.js:80:21){代码:'EADDRINUSE',errno:'EADDRINUSE',syscall:'listen',address:'::',port: 8081}


但是,当我单击保存ctrl + s密钥文件时,一切正常。通过单击浏览器中的链接http://localhost:8081 /,我得到Hello world!!!,再次按组合键ctrl + s时,我再次收到错误消息。如此每隔第二次。

我运行了fuser -k 8081/tcp命令,此后服务器无错误启动,但是当我保存文件时,出现错误,下次保存服务器时它将开始工作。如此每隔第二次。

服务器可能会以这种方式运行是什么原因?我怎么了

最佳答案

因此,基于错误消息(及其发生的频率),我认为这里的问题是该端口可以由其他应用程序使用。端口8080和8081可能是常用的端口,而诸如Skype之类的应用程序的goto端口也是如此。因此,当它正常工作时,您可能会劫持该端口。因此,这就像是不同应用程序和该端口之间的整体功耗之争。

因此,我建议尝试使用其他端口,看看是否能解决问题?

10-07 13:09
查看更多