Express.js 中间件速查表 - Express 常用命令与 API 开发大全

这套速查给用 Node 写 REST API 或 Web 应用的开发者,从小型内部服务到带 EJS 页面的完整站点都覆盖。内容围绕 app/router 搭建、带 :id 和查询串的路由、读懂 req 与拼好 res,再到 json/static/cors/helmet/morgan/compression 这一串中间件、EJS 渲染、JWT 鉴权,以及 async 错误处理那套写法。与随手抄的 Express 片段不同,这里按请求从进来到返回的生命周期分层排布。读完应能搭起应用、按正确顺序挂中间件和路由,并把异步错误收敛到统一 handler,而不是到处 try/catch。

编程语言·共 45 条命令·最后更新 2026-07-21
expressnodeweb

应用创建 5

const app = express()
创建应用实例
app.use(express.json())
挂载全局中间件(解析 JSON 请求体)
app.listen(3000, () => {})
监听端口启动服务
const router = express.Router()
创建可挂载路由器
app.set("port", process.env.PORT || 3000)
设置应用配置

路由定义 7

app.get("/users", handler)
注册 GET /users 路由,匹配读操作,handler 收到请求后返回数据
app.post("/users", handler)
注册 POST /users 路由,通常用于创建资源,需配合 express.json() 读 body
app.put("/users/:id", handler)
注册 PUT 路由,:id 是路径参数,在 handler 里用 req.params.id 拿到并更新
app.delete("/users/:id", handler)
注册 DELETE 路由,按路径参数定位并删除资源
app.all("/api/*", handler)
通配所有 HTTP 方法的前缀路由,适合做鉴权等通用逻辑
app.use("/api", router)
把子路由模块挂到 /api 前缀,拆分大型应用的路由组织
router.route("/users").get(list).post(create)
链式定义同一路径的多个方法,代码更聚合紧凑

请求对象 Request 6

req.params.id
取 URL 路径中的 :id 参数值,如 /users/7 得 7
req.query.page
取查询字符串参数,如 ?page=2 得 "2",分页/筛选常用
req.body.name
取请求体字段,需先 app.use(express.json()) 解析 JSON body
req.headers["content-type"]
读取请求头,判断内容类型/携带的 token 等
req.cookies.token
读取 Cookie,需先挂 cookie-parser 中间件
req.get("User-Agent")
获取指定请求头

响应对象 Response 6

res.send("hello")
发送默认 Content-Type:text/html 的文本响应,结束本次请求
res.json({ data })
把对象序列化为 JSON 并以 application/json 返回,写 API 最常用
res.status(201).json({ ok: true })
先设置状态码 201(已创建)再返回 JSON,链式一步到位
res.redirect("/login")
发送 302 跳转响应,未登录等鉴权流程常用
res.sendFile(path.join(__dirname, "index.html"))
直接把磁盘文件流式返回给客户端,静态页或一键下载用
res.set("X-Custom", "value")
设置单个响应头,如缓存策略或自定义标记

常用中间件 8

app.use((req, res, next) => { next() })
自定义中间件:先做日志/计时等处理,再 next() 交给下一个
express.urlencoded({ extended: true })
解析 HTML 表单的 application/x-www-form-urlencoded 请求体到 req.body
app.use("/static", express.static("public"))
把 public 目录以 /static 前缀对外提供静态资源,不用逐个写路由
cors()
跨域中间件,给响应加 CORS 头,前后端分离时按需配置来源白名单
helmet()
安全中间件,批量设置 X-Content-Type-Options 等 HTTP 安全头
morgan("dev")
请求日志中间件,dev 格式输出精简的一行摘要,开发排查很直观
cookie-parser()
把请求 Cookie 解析进 req.cookies,之后才能读 cookie 值
compression()
响应压缩中间件,对大 JSON/文本响应显著减体积省带宽

模板引擎与 JWT 6

app.set("view engine", "ejs")
设置默认模板引擎为 EJS,配合 layout/渲染使用
app.set("views", path.join(__dirname, "views"))
指定模板文件所在目录,res.render 按其相对路径找模板
res.render("index", { title: "Home" })
渲染把数据传入 index 模板并输出 HTML 响应,服务端渲染页面用
jwt.sign(payload, secret, { expiresIn: "1h" })
用 secret 签发带 1 小时过期时间的 JWT,登录成功时生成
jwt.verify(token, secret)
校验并解析 token,签名不符或过期会抛错,鉴权中间件核心
req.headers.authorization
从 Authorization 头取 "Bearer <token>",按约定解析出 JWT 明文

错误处理与实用模式 7

const wrap = (fn) => (req, res, next) => fn(req, res, next).catch(next)
异步错误包装器,自动捕获 async 错误
app.use((req, res) => res.status(404).send("Not Found"))
404 兜底处理
app.use((err, req, res, next) => res.status(500).json({ error: err.message }))
全局错误处理中间件(必须 4 个参数)
next(err)
传递错误到错误处理中间件
process.on("uncaughtException", handler)
捕获未处理异常
process.on("unhandledRejection", handler)
捕获未处理 Promise 拒绝
module.exports = router
导出路由模块供 app.use 挂载

提示

  • 中间件顺序很重要,body-parser 必须在路由之前,错误处理中间件必须放最后。
  • 错误处理中间件必须 4 个参数 (err, req, res, next),否则 Express 不识别。
  • 生产环境用 helmet() 加安全头,cors() 按需配置白名单。
  • express.static 可设置多个目录,按顺序查找文件。
  • Router 可模块化路由,app.use("/api", router) 挂载子路由。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们