Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【NodeJs】启动本地服务遭遇端口占用怎么办⁉️

【NodeJs】启动本地服务遭遇端口占用怎么办⁉️

作者头像
前端小鑫同学
发布于 2022-12-26 03:47:14
发布于 2022-12-26 03:47:14
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~

写作背景:

     在目前的众多前端工程化CLI中大多都提供在本地启动静态服务来辅助开发中页面的渲染,这些个CLI在遇到本地的端口占用的时候往往采用端口自增来重新启动服务。我相信这个现象在你开发项目的过程中也一定遇到过,如果没有遇到那你有没有发现控制台抛出包含“EADDRINUSE”的错误呢?

涉及知识点:

     在你在使用NodeJs做服务开发的过程中可能会遇到一个名为EADDRINUSE的错误,EADDRINUSEerror address in use的缩写,当我们重复启动同一个服务的时候会遭遇这个问题。意思就是已经有相同服务在监听这个端口、地址、处理器了,在NodeJs中文网的serverlisten模块下得知,处理这种问题的通常做法是延迟重试。下面是对应的示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server.on('error', (e) => {
  if (e.code === 'EADDRINUSE') {
    console.log('Address in use, retrying...');
    setTimeout(() => {
      server.close();
      server.listen(PORT, HOST);
    }, 1000);
  }
});

实现分析:

     通过上面的示例代码可以看出要想对端口实现自增后重启服务的效果的处理位置就在error的回调监听里面操作,当我们监听到抛出EADDRINUSE的错误后,将PORT自增后重新执行listen函数。同样在NodeJs中文网中提示:当且仅当在第一次调用 server.listen() 期间出现错误或调用 server.close() 时,才能再次调用 server.listen() 方法。 否则,将抛出 **ERR_SERVER_ALREADY_LISTEN **错误。

让启动服务不再尴尬:

  1. 构建一个基础的http服务:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const http = require('http');
let port = 3000;

const server = http.createServer((request, response) => {
    response.writeHead(200, {
        'Content-Type': 'text/plain;charset=utf-8',
    });
    response.end('欢迎访问');
});

server.listen(port, () => {
    console.log(`> Local: http://localhost:${port}`);
});
  1. 注册一个http服务失败的处理回调函数:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const onError = (e) => {
    if (e.code === 'EADDRINUSE') {
      //  TODO
    }
};

server.on('error', onError);
  1. 在失败的回调函数中当判断错误码为EADDRINUSEport进行自增:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const onError = (e) => {
    if (e.code === 'EADDRINUSE') {
        console.log(`Port ${port} is in use, trying another one...`);
        server.listen(++port);
    } else {
        console.log('其他错误:', e);
    }
};
  1. 完善代码,在成功启动服务和遇到其他失败的情况将失败的监听移除,以为我们将不再需要:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const http = require('http');
let port = 3000;

const server = http.createServer((request, response) => {
    response.writeHead(200, {
        'Content-Type': 'text/plain;charset=utf-8',
    });
    response.end('欢迎访问');
});

const onError = (e) => {
    if (e.code === 'EADDRINUSE') {
        console.log(`Port ${port} is in use, trying another one...`);
        server.listen(++port);
    } else {
        console.log('其他错误:', e);
    }
};

server.listen(port, () => {
    server.removeListener('error', onError);
    console.log(`> Local: http://localhost:${port}`);
});

扩展学习:

Vite就是使用这种方式来处理端口占用的构建工具,具体的代码可以参考vite项目的packages\vite\src\node\http.ts模块中的httpServerStart()函数。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[NodeJS]创建HTTP、HTTPS服务器与客户端
当从客户端请求流中读取到数据时会触发data事件,当读取完客户端请求流中的数据时触发end事件。
奋飛
2019/08/15
5.6K0
《Node.js权威指南》:如何创建HTTP服务器
在nodejs中可以很方便的创建服务器。nodejs提供了http模块和https模块,分别用于创建http服务器与http客户端、https服务器和https客户端。
前端_AWhile
2019/08/29
2.3K0
深入理解nodejs的HTTP处理流程
我们已经知道如何使用nodejs搭建一个HTTP服务,今天我们会详细的介绍nodejs中的HTTP处理流程,从而对nodejs的HTTP进行深入的理解。
程序那些事
2021/02/03
9790
nodejs初识
server 文件夹 --index.js --router.js --first-serve.js
andyhu
2022/12/14
7040
Nodejs搭建本地http服务器
由于不做php相关的东西,懒得装apache,干脆利用nodejs搭建一个本地的服务器用于测试。
星哥玩云
2022/07/01
3.4K0
Nodejs搭建本地http服务器
Node.js基础9:web 服务器1 请求与响应、路由
例如我们访问一个网站,www.123.com/index 这个/index就是路由,访问不同的页面路由就不一样,后台处理的方式也不一样,这样用来请求不同的资源. request.url获取浏览器传过来的路由信息,然后根据路由进行判断 server.js
代码之风
2019/04/19
9480
Node.js基础9:web 服务器1 请求与响应、路由
前端技术前沿7
使用response.writeHead()函数发送一个HTTP状态200和HTTP头的内容类型content-type,使用response.write()函数在HTTP相应主体中发送文本。
达达前端
2019/07/03
5540
前端技术前沿7
入门 Node.js Net 模块构建 TCP 网络服务
想做一个简单的 Web API,这个时候就需要搭建一个 Web 服务器,在 ASP.NET 中需要 IIS 来搭建服务器,PHP 中需要借助 Apache/Nginx 来实现,对于新手在还没开始之前看到这么多步骤,也许就要放弃了,但是在 Node.js 中开启一个 Web 服务器是 So Easy 的,我们利用 Net、Dgram、HTTP、HTTPS 等模块通过几行简单的代码就可实现。
五月君
2019/11/01
2.5K1
入门 Node.js Net 模块构建 TCP 网络服务
【nodejs】nodejs 入门实战教程 —— 从上传实例出发
方案:使用一个主文件,它可以被nodejs执行,同时建立不同功能的模块,这些模块可以被主文件和其他模块调用。
前端修罗场
2023/10/07
4790
【nodejs】nodejs 入门实战教程 —— 从上传实例出发
使用nodejs创建一个webServer
什么是 nodejs Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。 Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好,V8引擎执行Javascript的速度非常快,性能非常好,基于Chrome J
是小张啊喂
2021/06/23
6780
使用NodeJS写一个简单的api接口
用Node.js实现一个HTTP服务器程序非常简单。我们实现一个最简单的Web程序, 它对于所有请求,都返回Hello world!,新建一个文件夹apiDemo 在里面新建一个server.js写入:
九旬
2020/10/23
4.2K0
使用NodeJS写一个简单的api接口
Nodejs进阶:核心模块net入门与实例讲解
IMWeb前端团队
2017/12/29
1.5K0
Node入门教程(12)第十章:Node的HTTP模块
Ryan Dahl开发node的初衷就是:把Nginx非阻塞IO功能和一个高度封装的WEB服务器结合在一起的东东。所以Node初衷就是为了高性能的Web服务器去的,所以:Node的HTTP模块也是核心的核心。 本文需要您了解的前置知识点: HTTP协议 Web请求模型:请求→处理→响应 Node的流、事件 http模块的客户端 要使用 HTTP 服务器与客户端,需要 require('http')模块。http模块提供了两个函数http.request()和http.get(),帮助程序向服务器端发送请求。
老马
2018/04/16
1.2K0
Node·七天学会 NodeJS
以上程序使用 fs.readFileSync 从源路径读取文件内容,并使用 fs.writeFileSync 将文件内容写入目标路径。
数媒派
2022/12/01
2.3K0
nginx轮询负载均衡演示demo
上传3份nodejs文件 node /usr/workspace/nodejs/8881.js & node /usr/workspace/nodejs/8882.js & node /usr/workspace/nodejs/8883.js & node /usr/workspace/nodejs/8884.js &
oktokeep
2024/10/09
1450
nginx轮询负载均衡演示demo
NodeJS快速入门
简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
用户7353950
2022/05/11
9480
NodeJS快速入门
nodejs的引用和导出
正如我们想的那样,nodejs每次只能运行一个js脚本,所以如果想运行多个js脚本可以采用引用(require)的方式
是小张啊喂
2021/06/24
6870
node初级入门之搭建http服务器
​ 前置知识: 了解IP地址和端口是什么 http请求的大致过程(这个建议买本《图解http》看看) http核心模块的使用 导入http模块 定义服务器程序端口 创建服务器对象 调用服务器的监听方法,让服务器监听浏览器需求 // 1、导入http模块 const http = require("http"); // 2、定义服务器程序端口 const port = 8080;// 端口号:1-65535 (有些服务已经有一些默认端口 apache nginx 80 web 服务。 MySQL:3306
henu_Newxc03
2021/12/26
2K0
Node.js 基础知识:没有依赖关系的 Web 服务器
Node.js 是构建 web 应用服务端的一种非常流行的技术选择,并且有许多成熟的网络框架,比如 express, koa, hapijs。尽管如此,在这篇教程中我们不用任何依赖,仅仅使用 Node 核心的 http 包搭建服务端,并一点点地探索所有的重要细节。这不是你能经常看到的一种状况,它可以帮助你更好地理解上面提及的所有框架--现有的许多库不仅在底层使用这个包,而且经常会将原始对象暴露出来,使得你可以在某些特殊任务中应用他们。
五月君
2020/01/16
1.6K0
node web模块 (服务器端和客户端)
web服务器指网站服务器,指驻留在因特网上的某种程序,web浏览器的基本功能,提供信息浏览服务
mySoul
2018/07/28
2.2K0
相关推荐
[NodeJS]创建HTTP、HTTPS服务器与客户端
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验