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 的关键。

推荐阅读

相关推荐
打小就很皮...8 分钟前
dnd-kit 实现表格拖拽排序
前端·react.js·表格拖拽·dnd-kit
Ulyanov12 分钟前
从静态到沉浸:打造惊艳的Web技术发展历程3D时间轴
前端·javascript·html5·gui开发
打小就很皮...22 分钟前
React 19 + Vite 6 + SWC 构建优化实践
前端·react.js·vite·swc
Highcharts.js25 分钟前
使用Highcharts与React集成 官网文档使用说明
前端·react.js·前端框架·react·highcharts·官方文档
这是个栗子25 分钟前
AI辅助编程(二) - 通译千问
前端·ai·通译千问
李梨同学丶28 分钟前
0201好虫子周刊
后端
VT.馒头36 分钟前
【力扣】2625. 扁平化嵌套数组
前端·javascript·算法·leetcode·职场和发展·typescript
思想在飞肢体在追38 分钟前
Springboot项目配置Nacos
java·spring boot·后端·nacos
数研小生1 小时前
Full Analysis of Taobao Item Detail API taobao.item.get
java·服务器·前端
Shirley~~1 小时前
Vue-skills的中文文档
前端·人工智能