Node.js HTTP
学习HTTP模块 · 难度:入门 · +10XP
Node.js HTTP 模块
Node.js 内置的 http 模块 让你无需依赖任何第三方框架(如 Express)就能创建 Web 服务器和发起 HTTP 请求。http 模块基于事件驱动模型,能够高效处理大量并发连接。通过学习 http 模块,你将深入理解 Web 服务器的工作原理,这是成为 Node.js 高级开发者的必经之路。
创建 HTTP 服务器
使用 http.createServer() 创建服务器实例,它接受一个请求处理函数(回调),该函数在每次收到 HTTP 请求时被调用。处理函数接收两个参数:req(IncomingMessage,请求信息)和 res(ServerResponse,响应方法)。
const http = require('http');
const server = http.createServer((req, res) => {
const { method, url, headers } = req;
console.log([${new Date().toISOString()}] ${method} ${url});
// 设置响应头
res.setHeader('Content-Type', 'text/html; charset=utf-8');
if (url === '/') {
res.statusCode = 200;
res.end('<h1>欢迎来到首页</h1>');
} else if (url === '/api/data') {
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({ status: 'ok', time: Date.now() }));
} else {
res.statusCode = 404;
res.end('<h1>404 - 页面未找到</h1>');
}
});
server.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});
处理 POST 请求与请求体
| 数据格式 | Content-Type | 解析方式 |
|---|---|---|
| JSON | application/json | 拼接 buffer 后用 JSON.parse() |
| 表单 URL 编码 | application/x-www-form-urlencoded | 使用 querystring 模块解析 |
| 多部分表单(文件上传) | multipart/form-data | 使用 busboy 或 formidable 库 |
| 纯文本 | text/plain | 直接读取为字符串 |
const http = require('http');
const { parse } = require('querystring');
const server = http.createServer((req, res) => {
if (req.method === 'POST' && req.url === '/submit') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const parsed = parse(body);
console.log('收到表单数据:', parsed);
res.setHeader('Content-Type', 'text/html; charset=utf-8');
res.end(<h2>提交成功!你好,${parsed.name}</h2>);
});
} else {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/html; charset=utf-8');
res.end(
<form method="POST" action="/submit">
<input name="name" placeholder="输入名字" />
<button type="submit">提交</button>
</form>
);
}
});
server.listen(3000);
发起 HTTP 客户端请求
http 模块不仅可以创建服务器,还可以作为 HTTP 客户端向其他服务器发起请求。通过 http.get() 或 http.request() 方法,你可以调用外部 API、抓取网页、下载文件等。
- 使用 http 模块创建一个简易的静态文件服务器,根据 URL 返回对应的 HTML 文件
- 为服务器添加路由,分别处理 GET /users(返回用户列表 JSON)和 POST /users(接收新用户数据)
- 实现一个简单的 API 代理:将前端的请求转发到另一个 API 服务器,并将响应返回给前端
- 使用 http.get() 抓取某个公开 API 的数据,解析后输出到控制台
- 将 POST 数据写入本地 JSON 文件,实现一个持久化的简易数据存储服务