全书目录

第十二篇:Express 完全指南 —— 老城区主干道宇宙

第二章:为什么老城区需要主干道 —— Express 和 Node HTTP 的关系

1 分钟 390 字 第 240 / 962 个阅读单元

先看不用 Express 时,你得自己直接铺路:

js
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:

js
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 这层路基上,帮你管理主干道。

概念关系图:

text
客户端
  │
  ▼
Node.js http.Server
  │
  ▼
Express app
  ├── 全局中间件
  ├── 路由系统
  ├── 错误处理
  └── 响应辅助方法

一个很重要的稳定事实是:

Express 里的 reqres,底层仍然是 Node 提供的请求/响应对象,只是 Express 在上面补了很多方便的方法。

所以你会同时看到两种能力:

  • Node 原生能力:req.on('data')、流处理、底层 header 操作
  • Express 辅助能力:req.paramsreq.queryres.json()res.status()