Express 入门全指南:从 0 搭建你的第一个 Node Web 服务器

Express 入门全指南:从 0 搭建你的第一个 Node Web 服务器

本文将带你从零开始,快速搭建一个基于 Express 的 Web 服务器,理解路由与中间件的执行机制,并给出详细注释与实践示例。


一、Express 是什么?

Express 是 Node.js 中最流行的 Web 服务器框架。

通过它可以非常方便地:

  • 搭建网站服务器;
  • 处理 HTTP 请求;
  • 管理路由与中间件;
  • 支持静态资源、Cookie、Session 等常见功能。

它的定位就像是:

「Node.js 的服务器开发框架」,帮助你快速构建一个可以响应网页请求的后端。


二、使用步骤

1️ 初始化项目

csharp 复制代码
yarn init -y

或使用 npm:

csharp 复制代码
npm init -y

2️ 安装 express

csharp 复制代码
yarn add express

3️ 创建服务器文件

创建一个 index.js 文件,写入以下代码👇

javascript 复制代码
// 1. 引入 express
const express = require("express")

// 2. 获取服务器实例(app 就代表整个 Web 应用)
const app = express()

/* 
  Express 默认不会处理任何请求,
  想要服务器能正确响应,就必须为它设置路由或中间件。
*/

三、路由(Route)

路由的作用:

根据"请求路径 + 请求方式"来决定由谁处理该请求。

javascript 复制代码
// GET 请求:访问页面或获取数据
app.get("/hello", (req, res) => {
  console.log("有人访问 /hello 了!")

  // 读取请求信息(req)
  console.log(req.url)

  // 响应客户端(res)
  res.send("<h1>这是我的第一个 Express 服务器</h1>")
})

常见请求方法:

  • GET:获取数据
  • POST:提交数据
  • PUT:更新数据
  • DELETE:删除数据

访问地址示例:

bash 复制代码
http://localhost:3000/hello

四、中间件(Middleware)

1. 什么是中间件?

中间件是 Express 的核心机制,用于在请求到达路由前后执行逻辑。

例如:打印日志、解析请求体、校验权限等。

定义格式:

javascript 复制代码
app.use((req, res, next) => {
  console.log("我是中间件!")
  next() // 调用 next() 表示进入下一个中间件或路由
})

⚠️ 注意:

  • next() 必须在响应结束前调用。
  • 如果调用了 res.send() 后仍执行 next(),会报错(因为响应已结束)。

2. 多个中间件顺序执行示例

javascript 复制代码
app.use((req, res, next) => {
  console.log("111", Date.now())
  next()
})

app.use((req, res, next) => {
  console.log("222", Date.now())
  next()
})

app.use((req, res) => {
  console.log("333", Date.now())
  res.send("<h1>333 - 响应结束</h1>")
})

执行结果:

复制代码
111 1739933280000
222 1739933280005
333 1739933280006

请求会从第一个中间件依次向下传递,直到一个中间件终止(比如调用 res.send())。


3. 路由与中间件的区别

特性 路由(app.get() 中间件(app.use()
区分请求方式 ✅ 是(GET、POST) ❌ 否
匹配路径 精确匹配 可匹配父级路径
是否自动放行 需手动调用 next()
常见用途 业务处理 日志、权限、静态资源等

五、启动服务器

javascript 复制代码
// 启动服务器
app.listen(3000, () => {
  console.log("✅ 服务器已启动:http://localhost:3000")
})

访问你的服务器:

arduino 复制代码
http://localhost:3000

六、完整示例

下面是一份整合了中间件与路由的完整 Express 示例:

javascript 复制代码
// 引入 express
const express = require("express")

// 创建应用实例
const app = express()

// 1️⃣ 中间件(全局)
app.use((req, res, next) => {
  console.log("【全局中间件】请求时间:", new Date().toLocaleString())
  next()
})

// 2️⃣ 路由定义
app.get("/", (req, res) => {
  res.send("<h1>首页 - 欢迎访问我的服务器</h1>")
})

app.get("/about", (req, res) => {
  res.send("<h1>关于我们</h1>")
})

// 3️⃣ 兜底中间件(404)
app.use((req, res) => {
  res.status(404).send("<h1>404 - 页面未找到</h1>")
})

// 4️⃣ 启动服务器
app.listen(3000, () => {
  console.log("🚀 服务器启动成功:http://localhost:3000")
})

七、常见问题与易错点

问题 原因 解决方案
Cannot set headers after they are sent 在响应结束后再次发送响应 确保 res.send() 之后不再调用 next()
无法访问服务器 端口占用或未启动 检查 app.listen() 是否执行、端口是否冲突
中间件不生效 未调用 next() 在中间件函数中调用 next() 放行请求

八、后续扩展(进阶内容)

  • 静态资源中间件app.use(express.static("public"))
  • 请求体解析app.use(express.json())app.use(express.urlencoded({ extended: true }))
  • Cookie / Session 管理
  • 模板引擎(EJS、Handlebars)
  • MVC 架构整合

总结

  • Express 是 Node.js 中最主流的 Web 框架;
  • 核心概念:路由中间件
  • 使用 app.listen() 启动服务器;
  • 理解请求处理链,是掌握 Express 的关键。

推荐阅读

相关推荐
支支დ4 小时前
VO by Vercel 前端特定优势:为什么它是构建 AI 应用的新范式
前端·人工智能
香芋芋圆4 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
INS_KF5 小时前
【编程笔记】成员函数中两个 const 的区别(const Data &getData() const;)
前端·javascript·笔记
宿6745 小时前
vue3-async
前端·javascript·vue.js
YXWik65 小时前
记录前端请求接口在浏览器请求响应的Preview和Response展示的一样的问题
前端
2501_928996226 小时前
GPT-4o换DeepSeek迁移成本多少?中科热备解析API聚合平台技术账本
前端·数据库·人工智能
东风破_6 小时前
从跨域到 WebSocket:前端跨域方案、SSE 与双向实时通信详解
前端·后端
原则猫6 小时前
TS 类型工具
前端
excel6 小时前
Nuxt + Twin CSS 中宽度超过屏幕时底部出现空白的原因与解决方案
前端·javascript
行百里er7 小时前
Gateway 上别硬塞 MVC:DeferredImportSelector 看菜下锅
spring boot·后端·开源