Error: listen EADDRINUSE: address already in use 127.0.0.1:7888

node.js本地启动web server服务

直接写一个server.js文件

/*
* 加载【http】模块,该模块由javascript来编写
* 职责是创建 web 服务器 及 处理http相关的任务等
*/
const http = require('http');

const hostname = '127.0.0.1';
const port = 7888;

// 通过 createServer 创建 web服务器
const server = http.createServer((req, res) => {
  //req 请求体:获取请求相关的信息(请求来自哪里、是get还是post)
  //res 响应体:告诉服务器给请求响应什么内容
  console.log(req,res)
  // 设置响应的请求头状态码是200
  res.statusCode = 200;
  // 设置返回的文本类型:纯文本text/plain
  res.setHeader('Content-Type', 'application/json');  //序列化后的 JSON 字符串
  // 最后给客户端返回 hello world
  res.end('Hello World!\n');
});
// 通过 listen 监听端口 的请求
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});


然后输入命令行
node server.js

得到报错:127.0.0.1:7888端口已经被占用,需要进行关闭

Error: Command failed: node ./server.js
events.js:174
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use 127.0.0.1:7888
    at Server.setupListenHandle [as _listen2] (net.js:1279:14)
    at listenInCluster (net.js:1327:12)
    at doListen (net.js:1460:7)
    at process._tickCallback (internal/process/next_tick.js:63:19)
    at Function.Module.runMain (internal/modules/cjs/loader.js:832:11)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
Emitted 'error' event at:
    at emitErrorNT (net.js:1306:8)
    at process._tickCallback (internal/process/next_tick.js:63:19)
    [... lines matching original stack trace ...]
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

    at ChildProcess.exithandler (child_process.js:303:12)
    at ChildProcess.emit (events.js:182:13)
    at maybeClose (internal/child_process.js:961:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:5)
Error code: 1

1、Windows加r 打开cmd
Error: listen EADDRINUSE: address already in use 127.0.0.1:7888_第1张图片

2、运行netstat -ano,找到报错信息提示的端口号那一行,记住最后那个数字

netstat -ano

Error: listen EADDRINUSE: address already in use 127.0.0.1:7888_第2张图片
3、tskill加后面的数字
Error: listen EADDRINUSE: address already in use 127.0.0.1:7888_第3张图片

这个端口就可以重新使用了

但是,很坑的是得每一次都必须如此操作,在用完一次后,请求第二次就又会出现这个问题,然后纠结了很久,想在代码中实现杀掉进程,因为这个子进程没有关闭,所以,每次父程序退出后,子进程依然在,所以要想办法退出子程序!
所以我尝试了如下方法:

child.kill('SIGINT')
openExec.kill('SIGINT')
child.kill(signal='SIGTERM')
child_process.kill('signal'='SIGTERM')
server.close()

但是以上方法在我这不起作用,有的直接报错,说is not a function.

最后,看到一个博客,柳暗花明了,taskkill /f /t /im node.exe我直接杀掉了这个node进程,就不会有问题了,退出父程序时子进程也可以退出了。taskkill /f /t /im node.exe解决问题。

你可能感兴趣的:(bug,node,JavaScript,Demo)