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 本身没有内置路由。它只负责按顺序执行中间件。那路由怎么实现?

有两种方式:

  1. 手动判断:在中间件里自己判断 req.url 和 req.method
  2. 使用第三方路由中间件:比如 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 框架知识体系 Connect 框架 中间件机制 路由处理 与 Express 关系 日志记录 请求解析 身份验证 静态文件 手动判断 req.url 第三方路由中间件 继承中间件机制 增强路由和响应 💡 Connect 是 Express 的基础 理解 Connect 能帮你更深入掌握 Express 的设计思想

这张图把本章的核心内容串起来了。你从 Connect 出发,往左看是中间件机制,往右看是与 Express 的关系。中间件下面又细分了具体用途——这些都是我们后续章节会深入的内容。

小结

Connect 其实就三件事:

  • 它是一个中间件调度器,不干别的
  • 中间件通过 next() 串联,顺序执行
  • Express 是它的增强版,加了路由和响应增强

我个人觉得,学 Connect 最大的价值不是用它写生产项目(现在很少人这么干了),而是理解 Express 的底层原理。你想想看,当你用 Express 时,app.use() 和 next() 这些概念都是从 Connect 来的。搞懂了 Connect,Express 在你眼里就不再是黑盒了。