Node.js http HTTP 模块
http 模块提供 HTTP 服务器和客户端功能,是构建 Web 应用和网络通信的基础。
引入模块
JavaScript
const http = require('http');
创建 HTTP 服务器
JavaScript
const server = http.createServer((req, res) => {
// req: 请求对象
// res: 响应对象
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
server.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});
请求对象 req
JavaScript
const server = http.createServer((req, res) => {
// 请求方法
console.log('方法:', req.method); // GET, POST, PUT, DELETE
// 请求 URL
console.log('URL:', req.url); // /path?query=value
// 请求头
console.log('Headers:', req.headers);
// 解析 URL
const url = new URL(req.url, `http://${req.headers.host}`);
console.log('路径:', url.pathname);
console.log('查询参数:', url.searchParams.get('name'));
});
响应对象 res
JavaScript
const server = http.createServer((req, res) => {
// 设置状态码
res.statusCode = 200;
// 设置响应头
res.setHeader('Content-Type', 'application/json');
res.setHeader('X-Custom-Header', 'value');
// 多个响应头
res.writeHead(200, {
'Content-Type': 'text/html',
'Cache-Control': 'no-cache'
});
// 发送响应体
res.write('<html><body>');
res.write('<h1>Hello</h1>');
res.end('</body></html>');
// 或直接结束
res.end('响应内容');
});
处理 POST 请求体
JavaScript
const server = http.createServer((req, res) => {
if (req.method === 'POST') {
let body = '';
req.on('data', (chunk) => {
body += chunk;
});
req.on('end', () => {
console.log('请求体:', body);
res.end('收到数据');
});
}
});
路径路由
JavaScript
const server = http.createServer((req, res) => {
const url = new URL(req.url, `http://${req.headers.host}`);
const path = url.pathname;
if (path === '/') {
res.end('首页');
} else if (path === '/users') {
res.end('用户列表');
} else if (path === '/api/data') {
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({ data: 'test' }));
} else {
res.statusCode = 404;
res.end('未找到');
}
});
发送 HTTP 请求(客户端)
JavaScript
// 发送 GET 请求
http.get('http://example.com/api', (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log('响应:', data);
});
}).on('error', (err) => {
console.error('错误:', err.message);
});
发送 POST 请求
JavaScript
const options = {
hostname: 'example.com',
port: 80,
path: '/api',
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
};
const req = http.request(options, (res) => {
let data = '';
res.on('data', (chunk) => data += chunk);
res.on('end', () => console.log(data));
});
req.write(JSON.stringify({ name: 'test' }));
req.end();
req.on('error', (err) => {
console.error('错误:', err.message);
});
服务器事件
JavaScript
const server = http.createServer();
server.on('request', (req, res) => {
res.end('处理请求');
});
server.on('connection', (socket) => {
console.log('新连接');
});
server.on('close', () => {
console.log('服务器关闭');
});
server.on('error', (err) => {
console.error('服务器错误:', err);
});
server.listen(3000);
要点总结
- http.createServer 创建服务器,listen 启动监听
- req 包含 method、url、headers 等请求信息
- res 使用 statusCode、setHeader、end 发送响应
- req.on('data') 接收请求体,res.on('data') 接收响应体
- http.get/request 用于发送客户端请求
📝 发现内容有误?点击此处直接编辑