Node.js(Express)

一、Express框架核心概念

  1. 框架定位

    Express是基于Node.js平台的极简Web开发框架,封装了原生http模块,简化了Web服务器开发流程‌12。

  2. 核心功能

    • 路由系统:通过HTTP方法(GET、POST等)和路径匹配请求
    • 中间件:可插拔的请求处理模块
    • 静态资源托管:快速搭建文件服务‌34

二、环境搭建与基础使用

1. 安装Node.js与Express

csharp 复制代码
# 安装Node.js(官网下载)
node -v  # 验证安装

# 初始化项目并安装Express
npm init -y
npm install express

2. 创建基础服务器

javascript 复制代码
// app.js
const express = require('express');
const app = express();
const port = 3000;

// 定义根路由
app.get('/', (req, res) => {
  res.send('Hello Express!');
});

// 启动服务
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

运行命令:node app.js,访问http://localhost:3000即可看到响应‌12。

三、路由系统详解

1. 基础路由定义

javascript 复制代码
// GET请求处理
app.get('/api/user', (req, res) => {
  res.json({ name: 'John', age: 30 });
});

// POST请求处理
app.post('/api/login', (req, res) => {
  res.send('Login Success');
});

2. 动态路由参数

javascript 复制代码
app.get('/product/:id', (req, res) => {
  const productId = req.params.id;
  res.send(`Product ID: ${productId}`);
});

3. 路由模块化(推荐)

创建routes/user.js

ini 复制代码
const router = express.Router();
router.get('/list', (req, res) => {
  res.send('User List');
});
module.exports = router;

主文件中挂载:

ini 复制代码
const userRouter = require('./routes/user');
app.use('/user', userRouter);

四、中间件实践

1. 常用内置中间件

php 复制代码
// 解析JSON请求体
app.use(express.json());

// 解析表单数据
app.use(express.urlencoded({ extended: true }));

// 托管静态文件
app.use(express.static('public'));

2. 自定义中间件

javascript 复制代码
// 日志中间件
app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next(); // 传递给下一个中间件
});

// 错误处理中间件
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Server Error');
});

五、完整示例项目

文件结构

arduino 复制代码
project/
├── app.js
├── routes/
│   └── user.js
└── public/
    └── index.html

代码实现

javascript 复制代码
// app.js
const express = require('express');
const app = express();

// 中间件
app.use(express.json());
app.use(express.static('public'));

// 路由
app.get('/', (req, res) => {
  res.sendFile(__dirname + '/public/index.html');
});

// 用户模块路由
const userRouter = require('./routes/user');
app.use('/api/users', userRouter);

// 启动服务
app.listen(3000, () => {
  console.log('Server started on port 3000');
});
相关推荐
OEC小胖胖2 分钟前
14|Hook 的实现视角:从 API 到 Fiber Update Queue 的连接点
前端·react.js·前端框架·react·开源库
小冷coding3 分钟前
【面试】围绕‌服务注册与发现、配置中心、熔断限流、API网关路由‌四大核心组件会面临哪些问题?
java·面试·职场和发展
i7i8i9com3 分钟前
React 19学习基础-2 新特性
javascript·学习·react.js
军军君014 分钟前
Three.js基础功能学习十:渲染器与辅助对象
开发语言·前端·javascript·学习·3d·前端框架·ecmascript
Marshmallowc5 分钟前
React useState 数组 push/splice 后页面不刷新?深度解析状态被『蹭』出来的影子更新陷阱
前端·react.js·前端框架
GIS之路9 分钟前
ArcGIS Pro 添加底图的方式
前端·数据库·python·arcgis·信息可视化
Mo_jon10 分钟前
vite + vue 快速构建 html 页面 (舒适编写html文件)
前端·vue.js·html
步步为营DotNet12 分钟前
深度解析.NET 中Nullable<T>:灵活处理可能为空值的类型
java·前端·.net
VT.馒头14 分钟前
【力扣】2631. 分组
javascript·算法·leetcode·typescript
恃宠而骄的佩奇18 分钟前
网络安全面试题——安全服务
web安全·网络安全·面试·奇安信