Node.js 内置核心模块 http 专门用于创建 HTTP 服务器和客户端,无需依赖第三方服务器软件,即可快速搭建 Web 服务、处理网络请求与响应。 依托 http 模块,我们可以实现路由处理、动态内容生成、接口开发等功能,它是 Node.js 服务端开发、网络应用构建的基础核心模块。
网络通信中,两个核心角色分工明确:
客户端:主动发起请求、消费网络资源的设备(如浏览器、手机 APP)
服务器:被动接收请求、对外提供网络资源的设备(如网站服务器、接口服务器)
Node.js 提供的 http 模块,是实现 Web 服务器的核心工具。通过几行代码,就能将普通电脑搭建为支持 HTTP 通信的服务器,替代 IIS、Apache、Nginx 等传统服务器软件。
使用前必须先导入模块:
const http = require('http');传统 Web 服务器需要安装专用软件,而 Node.js 的 http 模块:
轻量高效,基于事件驱动、非阻塞 I/O 模型
原生支持,无需额外安装依赖
高度自定义,可灵活处理请求、响应、路由
适合开发轻量级 Web 服务、API 接口
IP 地址是互联网中设备的唯一身份标识,相当于设备的 "电话号码",是网络通信的基础。
格式:点分十进制(a.b.c.d),每一段取值范围为 0 ~ 255
本地测试专用 IP:127.0.0.1(代表当前本机,不联网即可访问)
查看服务器 IP:Windows 终端执行 ping www.baidu.com
IP 地址难以记忆,因此使用域名(字符型地址)作为替代:
域名与 IP 地址一一对应
DNS(域名服务器):负责将域名解析为对应的 IP 地址
本地测试域名:localhost,对应 IP 127.0.0.1
端口号是计算机中网络服务的唯一编号,用于区分同一台设备上的多个 Web 服务。
类比:大楼的房间号,精准定位服务
端口范围:0 ~ 65535
知名端口:1 ~ 1023(系统预留,如 80 端口默认 HTTP 服务)
开发常用:3000、8080、9000(自定义端口,避免冲突)
规则:同一端口同一时间只能被一个服务占用
默认规则:HTTP 的 80 端口可在 URL 中省略

创建基础 Web 服务器分为 4 个固定步骤,简单易记:
导入 http 内置模块
创建服务器实例对象
绑定 request 事件,监听并处理客户端请求
调用 listen 方法,启动服务器并监听指定端口
整合拆分的代码,编写可直接运行的完整示例:
// 1. 导入 http 模块
const http = require('http');
// 2. 创建 web 服务器实例
const server = http.createServer();
// 3. 为服务器绑定 request 事件,监听客户端请求
server.on('request', (req, res) => {
console.log('Someone visit our web server.');
});
// 4. 启动服务器,监听 80 端口
server.listen(80, () => {
console.log('HTTP server running at http://127.0.0.1');
});运行代码后,浏览器访问 http://127.0.0.1,终端会打印对应日志。

req(Request)是请求对象,包含客户端发起请求的所有核心信息:
req.url:客户端请求的 URL 路径(如 /、/about.html)
req.method:客户端请求的方法类型(如 GET、POST)
req.headers:完整的请求头信息
示例代码:
server.on('request', (req, res) => {
// 解构获取核心请求信息
const { url, method } = req;
const str = `Your request url is ${url}, and request method is ${method}`;
console.log(str);
});res(Response)是响应对象,用于向客户端返回数据并结束请求:
res.setHeader():单独设置响应头信息
res.writeHead():同时设置响应状态码 + 响应头(推荐)
res.end():必须调用,向客户端返回内容并结束本次请求
基础响应示例:
server.on('request', (req, res) => {
const str = `Your request url is ${req.url}, and request method is ${req.method}`;
// 向客户端响应数据并结束请求
res.end(str);
});响应中文内容时会出现乱码,必须设置响应头的字符编码:
server.on('request', (req, res) => {
const str = `您请求的 URL 地址是 ${req.url}, 请求的 method 类型是 ${req.method}`;
// 设置响应头,解决中文乱码问题
res.setHeader('Content-Type', 'text/html; charset=utf-8');
// 响应中文内容
res.end(str);
});获取客户端请求的 URL 地址
设置默认的 404 响应内容
根据不同 URL 匹配对应的页面
统一配置响应头,防止中文乱码
通过 res.end() 将结果返回客户端
server.on('request', (req, res) => {
// 获取请求 URL
const url = req.url;
// 默认响应 404 页面
let content = '<h1>404 Not found!</h1>';
// 路由匹配:根据不同 URL 返回不同内容
if (url === '/' || url === '/index.html') {
content = '<h1>首页</h1>';
} else if (url === '/about.html') {
content = '<h1>关于我们</h1>';
}
// 配置响应头
res.setHeader('Content-Type', 'text/html; charset=utf-8');
// 响应最终内容
res.end(content);
});GET:查询 / 获取服务器资源(如访问网页、获取数据)
POST:向服务器提交数据(如登录、注册、上传文件)
200:请求成功,资源正常返回
404:请求的资源不存在
500:服务器内部错误
若运行报错 EADDRINUSE,代表端口被占用:
更换端口号(推荐 3000、8080、9000)
关闭占用当前端口的程序
模板字符串是 ES 6 新增的语法,使用反引号 ` 包裹字符串,支持直接嵌入变量 / 表达式:
语法:`字符串${变量}字符串`
优势:替代繁琐的字符串拼接,代码更简洁、可读性更高
基础示例:
const name = "John";
const greeting = `Hello, ${name}!`;
console.log(greeting);在 http 模块开发中,模板字符串常用于拼接动态响应内容,是服务端开发的必备语法。
本地开发优先使用自定义端口(3000/8080),避免占用系统预留端口
所有响应中文的接口,必须配置 utf-8 编码
每次请求处理完成后,必须调用 res.end()
路由匹配遵循 精确匹配优先 原则
http 是 Node.js 内置模块,无需安装,可快速搭建轻量级 Web 服务器
req 用于获取客户端请求信息,res 用于向客户端返回响应数据
中文乱码的固定解决方案:设置响应头 Content-Type: text/html; charset=utf-8
端口号用于区分同一设备的不同网络服务,开发常用 3000、8080 端口
通过 req.url 可实现基础路由匹配,动态响应不同页面内容