Connect 框架概述
说实话,我第一次接触 Node.js 后端开发时,也被各种框架搞得有点晕。Express、Koa、Connect……它们到底什么关系?今天咱们就从 Connect 开始,把这个脉络理清楚。
什么是 Connect
Connect 是一个 Node.js 的 HTTP 框架。它的核心思想很简单:把 HTTP 请求处理拆成一个个小函数,然后串起来执行。每个小函数只干一件事,干完就交给下一个。
我当年在一个老项目中接手过 Connect 写的代码。第一眼看到时觉得「这什么玩意儿?」,但真正理解了它的设计后,反而觉得这种简洁有种独特的美感。
Connect 的本质:一个中间件调度器。它不帮你做路由匹配、不帮你解析请求体、不帮你处理 Session——它只负责把请求按顺序传给一个个中间件函数。
你可以把 Connect 想象成一条流水线。原材料(HTTP 请求)从一端进来,经过一个个工位(中间件),每个工位做一点加工,最后产出成品(HTTP 响应)。
Connect 的核心概念
中间件(Middleware)
中间件是 Connect 的灵魂。每个中间件就是一个函数,签名长这样:
function myMiddleware(req, res, next) {
// 处理请求
// 可以修改 req 和 res 对象
// 处理完后调用 next() 交给下一个中间件
next();
}
这里有个关键点:next 参数。你不调用 next(),请求就卡住了。我踩过这个坑——写了个日志中间件,忘了调 next(),结果所有请求都超时。排查了半天才发现是少了个括号。
中间件可以干很多事情:
- 日志记录:记录每个请求的方法、URL、耗时
- 请求解析:解析查询参数、请求体
- 身份验证:检查用户是否登录
- 静态文件服务:直接返回文件内容
- 错误处理:捕获异常,返回友好的错误信息
个人习惯:我写中间件时,喜欢在开头加一行 console.time('middleware-name'),结尾加 console.timeEnd('middleware-name')。这样能快速定位性能瓶颈。
路由(Routing)
Connect 本身没有内置路由。它只负责按顺序执行中间件。那路由怎么实现?
有两种方式:
- 手动判断:在中间件里自己判断
req.url和req.method - 使用第三方路由中间件:比如
router模块
手动判断的代码长这样:
const connect = require('connect');
const app = connect();
app.use((req, res, next) => {
if (req.url === '/hello' && req.method === 'GET') {
res.end('Hello World!');
} else {
next(); // 不是这个路由,交给下一个
}
});
app.use((req, res) => {
res.statusCode = 404;
res.end('Not Found');
});
app.listen(3000);
你看,其实就是用 if-else 加 next() 实现了路由。简单粗暴,但够用。
注意:中间件的顺序很重要!Connect 是按 app.use() 的调用顺序依次执行的。如果你把 404 处理放在最前面,那所有请求都会返回 404。我曾经在重构时调整了中间件顺序,结果整个 API 都挂了——嗯,从那以后我再也不敢乱改顺序了。
Connect 与 Express 的关系
这个问题很多人问过。简单来说:Express 是在 Connect 基础上封装的。
Express 继承了 Connect 的中间件机制,然后加了三样东西:
| 特性 | Connect | Express |
|---|---|---|
| 中间件机制 | ✅ 核心功能 | ✅ 继承并增强 |
| 路由系统 | ❌ 需要自己实现 | ✅ 内置 app.get()、app.post() 等 |
| 请求/响应增强 | ❌ 原生 req/res | ✅ 添加了 req.params、res.json() 等 |
| 模板引擎 | ❌ 不内置 | ✅ 支持集成 |
| 静态文件服务 | ❌ 需要第三方中间件 | ✅ 内置 express.static() |
说白了,Express 就是 Connect 的「增强版」。如果你觉得 Connect 太原始,那就用 Express。但如果你想理解 Express 的底层原理,或者需要极简的框架,Connect 是个好选择。
我记得有次面试,面试官问:「Express 和 Connect 有什么区别?」我直接说:「Express 是 Connect 的儿子,继承了家产还自己开了公司。」面试官笑了,然后我拿到了 offer。
知识体系总览
下面这张图能帮你快速建立本章的知识结构:
这张图把本章的核心内容串起来了。你从 Connect 出发,往左看是中间件机制,往右看是与 Express 的关系。中间件下面又细分了具体用途——这些都是我们后续章节会深入的内容。
小结
Connect 其实就三件事:
- 它是一个中间件调度器,不干别的
- 中间件通过
next()串联,顺序执行 - Express 是它的增强版,加了路由和响应增强
我个人觉得,学 Connect 最大的价值不是用它写生产项目(现在很少人这么干了),而是理解 Express 的底层原理。你想想看,当你用 Express 时,app.use() 和 next() 这些概念都是从 Connect 来的。搞懂了 Connect,Express 在你眼里就不再是黑盒了。