核心概念
概念 说明
http.createServer() 创建一个 HTTP 服务器实例
server.listen(port, host, callback) 监听指定端口和主机,启动服务器
request 事件 每当有请求到达时触发,回调参数为 req(请求对象)和 res(响应对象)
req 常用属性 url、method、headers、httpVersion
res 常用方法 res.writeHead(statusCode, headers)、res.write(data)、res.end(data)
res 状态码 200(成功)、404(未找到)、500(服务器错误)等
Content-Type 告诉浏览器如何解析响应内容(如 text/html、application/json)
处理请求的常见模式
路由:根据 req.url 和 req.method 分发到不同逻辑。
获取查询参数:使用 url.parse(req.url, true).query。
获取 POST body:监听 data 和 end 事件,拼接 Buffer 或字符串。
返回静态文件:结合 fs 模块读取文件,设置正确的 Content-Type。
返回 JSON:Content-Type: application/json,res.end(JSON.stringify(obj))。
进阶话题
req.socket:获取客户端连接信息。
res.setHeader() 与 res.writeHead() 的区别。
流式响应:用 fs.createReadStream().pipe(res) 处理大文件。
HTTPS 支持:使用 https 模块,需提供证书。
Node.js http 模块
创建服务器
javascript
- http.createServer([options][, requestListener])
- 返回 http.Server 实例
- server.listen(port[, host][, backlog][, callback])
- 监听端口,启动服务
事件模型
javascript
- 事件: 'request' (最常用)
- 回调: (req, res) => {}
- 事件: 'connection'
- 事件: 'close'
请求对象 req (http.IncomingMessage)
javascript
- 属性
- req.url // 请求路径(含查询字符串)
- req.method // GET / POST / PUT / DELETE 等
- req.headers // 请求头对象
- req.httpVersion
- 读取数据
- req.on('data', chunk => {}) // 接收 POST body
- req.on('end', () => {}) // 数据接收完毕
响应对象 res (http.ServerResponse)
javascript
- 设置响应头
- res.writeHead(statusCode, statusMessage?, headers?)
- res.setHeader(name, value)
- 发送数据
- res.write(chunk[, encoding][, callback])
- res.end([data][, encoding][, callback])
- 状态码
- 200 OK
- 404 Not Found
- 500 Internal Server Error
常见 Content-Type
javascript
- text/html
- text/css
- application/javascript
- application/json
- image/png, image/jpeg
静态文件服务
- 路径解析 (path 模块)
- 读取文件 (fs 模块)
- 设置正确 Content-Type
- 错误处理 (404, 500)
与 URL 模块配合
javascript
- const url = require('url');
- url.parse(req.url, true) -> 得到 query 对象
实用技巧
- 统一路由分发 (switch 或 map)
- 处理 favicon.ico (避免多余请求)
- 防止路径遍历攻击 (...)
- 使用流式传输大文件