Kodokon kodokon.com

Express:路由与中间件

安装 Express,用路由、URL 参数和中间件搭建你的第一个服务器。

9 分钟 · 3 题

在 Kodokon 中打开本课

你已经知道如何用原生的 http 模块启动一个服务器:在那里一切都要手动完成,从读取 URL 到组装响应头。Express 是在 Node 一侧让 Web 开发标准化的框架:路由、中间件、简洁的 API,同时又不隐藏协议的任何细节。创建一个项目并安装它。

BASH
mkdir kodokon-api
cd kodokon-api
npm init -y
npm install express

给你的 package.json 添加值为 moduletype 属性:整个项目都将使用 ES 模块。然后创建 server.js。寥寥几行就足以搭起一个可用的服务器:你创建应用、声明一个路由,并监听某个端口。

JAVASCRIPT
import express from "express";

const app = express();

app.get("/", (req, res) => {
  res.send("Kodokon API online");
});

app.listen(3000, () => {
  console.log("http://localhost:3000");
});
server.js - 用 node server.js 运行它

一个路由把某个 HTTP 方法和某条路径映射到一个函数上。动态片段用冒号声明:在 /users/:id 中,它的值可以通过 req.params.id 取到。查询参数(?q=node)会出现在 req.query 里。请记住这个区别:路径标识资源,查询字符串细化请求。

JAVASCRIPT
app.get("/users/:id", (req, res) => {
  const { id } = req.params;
  res.json({ id, name: "User " + id });
});

app.get("/search", (req, res) => {
  const { q } = req.query;
  res.json({ query: q ?? "" });
});

中间件是一个在请求到达和你的路由之间运行的函数。它的签名是:(req, res, next)。它可以丰富 req、直接响应,或者用 next() 把控制权交出去。Express 本质上就是一条中间件链:日志、认证、请求体解析。下面这个会把每个请求连同它的耗时一起记录下来:

JAVASCRIPT
app.use((req, res, next) => {
  const start = Date.now();
  res.on("finish", () => {
    const ms = Date.now() - start;
    console.log(`${req.method} ${req.url} ${ms}ms`);
  });
  next();
});
把它声明在你的路由之前,就能记录一切

知识检测

确认你已牢记本课的重点内容。

  1. 一个路由用路径 /users/:id 声明。你在哪里读取 id 的值?
    • req.query.id
    • req.params.id
    • req.body.id
  2. 在 Express 中间件里,调用 next() 会做什么?
    • 它把响应发回给客户端
    • 它把控制权交给下一个中间件或路由
    • 它重启服务器
    • 它取消当前请求
  3. 要在 Node.js 中使用 import 语法,你需要往 package.json 里添加什么?
    • 值为 moduletype 属性
    • 值为 trueesm 属性
    • 什么都不用,这是默认行为