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');
});
相关推荐
荒夜长歌16 分钟前
传统java行业跳槽面试汇总(后续会更新)
java·面试·跳槽
重庆小透明21 分钟前
【面试问题】java小厂
java·开发语言·面试
六元七角八分25 分钟前
学习笔记一《JavaScript基础语法》
javascript·笔记·学习
有一个好名字36 分钟前
claude code安装
linux·运维·前端
zone773941 分钟前
007:RAG 入门-向量嵌入与检索
后端·面试·agent
BIBABULALA1 小时前
Mini Virtual Machine — 可视化虚拟机模拟器(91行)
前端·css·css3
筱璦1 小时前
期货软件开发「启动加载页 / 初始化窗口」
前端·c#·策略模式·期货
只与明月听1 小时前
RAG深入学习之Emabedding
前端·python·面试
We་ct1 小时前
React Scheduler & Lane 详解
前端·react.js·前端框架·reactjs·个人开发·任务调度·优先
小道士写程序1 小时前
Babylon.js WebGPU Ocean Demo — 完整踩坑记录
开发语言·javascript·ecmascript