当前位置: 首页 > news >正文

Node.js 中使用 Express 框架系统详细讲解

Node.js 中使用 Express 框架系统详细讲解


一、什么是 Express?

Express 是一个基于 Node.js 平台的极简、灵活且广泛使用的 Web 应用框架。它简化了构建 Web 服务器和 API 的流程,提供了一套丰富的功能,比如路由管理、中间件支持、模板引擎集成等。


二、环境准备

  1. 安装 Node.js(官网:https://nodejs.org/)

  2. 初始化项目

    mkdir my-express-app
    cd my-express-app
    npm init -y  # 快速生成 package.json
    
  3. 安装 Express

    npm install express
    

三、创建一个简单的 Express 服务器

创建一个文件 app.js,写入如下代码:

const express = require('express');
const app = express();// 监听端口
const PORT = 3000;// 路由:响应根路径 GET 请求
app.get('/', (req, res) => {res.send('Hello, Express!');
});// 启动服务器
app.listen(PORT, () => {console.log(`Server is running at http://localhost:${PORT}`);
});

运行命令:

node app.js

打开浏览器访问 http://localhost:3000/,你会看到页面显示 Hello, Express!


四、Express 核心概念讲解

1. 路由(Routing)

Express 通过路由匹配客户端请求的 URL 和 HTTP 方法,来决定如何响应。

  • app.get(path, handler) - 处理 GET 请求
  • app.post(path, handler) - 处理 POST 请求
  • app.put(path, handler) - 处理 PUT 请求
  • app.delete(path, handler) - 处理 DELETE 请求

示例:

app.get('/users', (req, res) => {res.send('获取用户列表');
});app.post('/users', (req, res) => {res.send('创建新用户');
});

2. 请求对象(req)和响应对象(res)

  • req 包含请求相关信息,比如 URL 参数、请求体、查询字符串等
  • res 用来构建响应,常用方法有:
    • res.send()
    • res.json()
    • res.status()
    • res.redirect()

五、中间件(Middleware)

Express 的中间件本质是一个函数,接收三个参数 (req, res, next),用于处理请求和响应的过程。中间件可以执行代码、修改请求对象、响应对象,或者结束请求-响应循环。

内置中间件示例

// 解析 JSON 请求体
app.use(express.json());// 解析 URL-encoded 请求体
app.use(express.urlencoded({ extended: true }));

自定义中间件示例

app.use((req, res, next) => {console.log(`${req.method} ${req.url} 时间: ${new Date().toISOString()}`);next(); // 调用 next 传递控制权
});

六、静态资源服务

使用内置的静态中间件 express.static() 来托管静态文件:

app.use(express.static('public'));

将静态文件(如 HTML、CSS、JS、图片)放入 public 文件夹,浏览器即可访问。


七、处理路由参数与查询参数

  • 路由参数示例:
app.get('/users/:id', (req, res) => {const userId = req.params.id;res.send(`用户ID: ${userId}`);
});
  • 查询参数示例:
app.get('/search', (req, res) => {const keyword = req.query.keyword;res.send(`搜索关键词是: ${keyword}`);
});

八、POST 请求与请求体

客户端通过 POST 发送 JSON 或表单数据时,需要解析请求体。

app.post('/login', (req, res) => {const { username, password } = req.body;res.send(`用户名:${username},密码:${password}`);
});

需要确保已启用 JSON 解析中间件:

app.use(express.json());

九、分离路由(Router)

当项目变大时,可以使用 express.Router() 来分离路由模块:

const express = require('express');
const router = express.Router();router.get('/list', (req, res) => {res.send('用户列表');
});router.post('/add', (req, res) => {res.send('新增用户');
});module.exports = router;

主应用中使用:

const userRouter = require('./routes/user');
app.use('/users', userRouter);

十、错误处理

定义错误处理中间件,必须有四个参数 (err, req, res, next)

app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send('服务器错误');
});

十一、示例完整代码

const express = require('express');
const app = express();app.use(express.json());
app.use(express.urlencoded({ extended: true }));// 自定义日志中间件
app.use((req, res, next) => {console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);next();
});app.get('/', (req, res) => {res.send('Hello, Express!');
});app.get('/users/:id', (req, res) => {res.send(`用户ID: ${req.params.id}`);
});app.post('/login', (req, res) => {const { username, password } = req.body;res.send(`用户名: ${username}, 密码: ${password}`);
});// 错误处理中间件
app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send('服务器错误');
});const PORT = 3000;
app.listen(PORT, () => {console.log(`Server running at http://localhost:${PORT}`);
});

http://www.lqws.cn/news/72055.html

相关文章:

  • Redis持久化机制详解:RDB与AOF的深度剖析
  • 风控研发大数据学习路线
  • 大数据学习(127)-hive日期函数
  • 使用Python进行函数作画
  • 超声波测距三大算法实测对比
  • 代码随想录算法训练营第60期第五十五天打卡
  • 详解一下RabbitMQ中的channel.Publish
  • flutter开发安卓APP适配不同尺寸的手机屏幕
  • mysql数据库实现分库分表,读写分离中间件sharding-sphere
  • 【数据分析】第三章 numpy(1)
  • MapReduce(期末速成版)
  • node-sass 报错
  • CppCon 2014 学习:Gamgee: A C++14 library for genomic data processing and analysis
  • Python Day41
  • Python趣学篇:用Pygame打造绚烂流星雨动画
  • C++.cstring string
  • 第七章.正则表达式
  • 电子电路:4017计数器工作原理解析
  • NodeJS全栈WEB3面试题——P7工具链 测试
  • PHP7+MySQL5.6 查立得轻量级公交查询系统
  • 8.linux文件与文件夹内处理命令cp,mv,rm
  • AlmaLinux OS 10 正式发布:兼容 RHEL 10 带来多项技术革新
  • JavaSE知识总结(集合篇) ~个人笔记以及不断思考~持续更新
  • 《深度探索C++对象模型》阅读笔记(完整版)
  • Linux之进程间通信
  • AJAX对于XML和JSON的处理
  • Missashe考研日记—Day51-Day57
  • 企业级开发中的 maven-mvnd 应用实践
  • window ollama部署模型
  • QT入门学习(二)---继承关系、访问控制和变量定义