先看不用 Express 时,你得自己直接铺路:
const http = require('node:http');
const server = http.createServer((req, res) => {
if (req.method === 'GET' && req.url === '/') {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
res.end('老城区交通局首页');
return;
}
if (req.method === 'GET' && req.url === '/roads') {
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json; charset=utf-8');
res.end(JSON.stringify([{ id: 1, name: '中山主路' }]));
return;
}
res.statusCode = 404;
res.end('Not Found');
});
server.listen(3000);这不是不能用,而是你很快会遇到几件事:
- 路口一多,
if/else会变成蜘蛛网。 - JSON、表单、静态资源、错误处理,都得自己补。
- 路由复用、模块拆分、统一日志,会越来越难管。
再看 Express:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('老城区交通局首页');
});
app.get('/roads', (req, res) => {
res.json([{ id: 1, name: '中山主路' }]);
});
app.listen(3000);这时你其实不是放弃了 Node HTTP,而是:
让 Express 站在 Node HTTP 这层路基上,帮你管理主干道。
概念关系图:
客户端
│
▼
Node.js http.Server
│
▼
Express app
├── 全局中间件
├── 路由系统
├── 错误处理
└── 响应辅助方法一个很重要的稳定事实是:
Express 里的 req 和 res,底层仍然是 Node 提供的请求/响应对象,只是 Express 在上面补了很多方便的方法。
所以你会同时看到两种能力:
- Node 原生能力:
req.on('data')、流处理、底层 header 操作 - Express 辅助能力:
req.params、req.query、res.json()、res.status()