近年来,Node.js 已成为一种非常流行的技术,它让前端开发者们能够通过 JavaScript 语言编写、运行和构建 Web 应用程序。而 Node.js 中的中间件则是开发过程中必不可缺的一部分,它可以让开发者轻松地管理功能和路由,同时还可以提供安全性和性能方面的优化。在本文中,我们将深入研究如何使用 Node.js 中的中间件。
中间件:middleware
中间件是Express的两大核心之一 (路由、中间件)
中间件就是一个中间流程。目的是为了处理公共的逻辑、业务
注意:
1. 一定要在路由前注册中间件
2. next()函数不要忘
3. next()函数之后不要再去书写代码
4. 连续调用多个中间件时,共享req.res

1.按照功能分类:
1)自定义中间件
2).内置中间件
express.static() 静态资源中间件
express.json() 解析post方式提交的json格式的数据:application / json
express.urlencoded() 解析post方式提交的urlencoded格式的数据: x - www - form - urlencoded格式数据
3)第三方中间件
2.按照级别分类:
1) app级别的中间件
2)router级别的中间件
在使用中间件之前,我们需要先将其安装到我们的项目中。可以使用 Node.js 包管理器(例如 npm)安装中间件:
npm install 中间件名称
安装完成后,我们需要通过 require 或 import 将其引入到我们的代码中:
- const 中间件名称 = require("中间件名称");
- // 或者
- import 中间件名称 from"中间件名称"
- const express = require(express);
- const app = express();
-
- // 使用中间件
- app.use(中间件名称);
上述代码中,我们创建了一个 Express 应用程序并引入了 express 中间件。接下来,我们使用 app.use() 方法将 中间件名称 应用于我们的应用程序中。这样,每个 HTTP 请求都会先经过中间件处理,再到达我们的应用程序。
- // 调用postData函数,会得到一个函数
- let postData = function () {
- return function (req, res, next) {
- let arr = [];
- req.on('data', chunk => {
- arr.push(chunk);
- });
- req.on("end", () => {
- req.body = Buffer.concat(arr).toString();
- next();
- });
- };
- };
-
- // 自定义中间件 ---->取出post参数
- app.use(postData());
- 内置中间件
- let express = require("express");
- let app = express();
-
- app.use(express.static(path.join(__dirname, "public"))); // 指定public目录为静态资源目录
-
- // urlencoded中间件 是用来 接收 post请求的请求头 设置为 content-type:application/x-www-form-urlencoded 提交过来的数据 是 查询字符串
- // 中间件中 传入的实参对象 就是用来 选择 使用什么工具 来格式化查询字符串的 如果值为true 表示使用express 自带的 qs工具 进行格式化(不推荐) 如果值为false 表示使用node的querystring来格式化(推荐)
- app.use(express.urlencoded({extended:false}));
-
- // json中间件 是用来 接收 post请求头 设置为 content-type:application/json
- // 提交过来的数据 是 json格式的对象 可以直接使用 不需要格式化 所以不传参
-
- app.use(express.json())
-
- // 再之后 我们就可以直接获取到 post提交的数据了 通过 req形参的body属性来获取
- app.post("/index",(req,res)=>{
- console.log(req.body);
- })
-
- app.listen(3000)
- svg-captcha 验证码
- let svgCaptcha = require('svg-captcha');
-
- let captcha = svgCaptcha.create({
- API
- size: 4 // 验证码字符个数
- ignoreChars: '0o1i' // 忽略字符
- noise: 1 // 干扰线
- color: true // 字符是否有颜色
- background: '#cc9966' // 背景颜色
- });
- console.log(captcha.text); // 文本验证码(数字)
- res.send(captcha.data); // 将svg格式的图片响应给前端
- serve-favicon 小图标
- app.use(serveFav(path.join(__dirname, "assets", "favicon.ico")));
- const cors = require('cors');
- app.use(cors());
- formidable 文件上传
- const formidable = require('formidable');
- //文件上传
- app.post("/upload", (req, res) => {
- const fd = formidable({
- // 配置项
- uploadDir: path.join(__dirname, "temp"), // 存到哪个文件夹内
- filename: "img", // 文件夹名称
- // encoding:""// 编码
- // uploadDir:"",//上传文件保存目录
- //filename:""
- })
-
- //解析文件----接收文件
- fd.parse(req, function (err, fields, files) {
- // 上传失败就不往下走了
- if (err) {
- res.send("上传失败");
- return;
- };
- // fields 字段 { usernmae: '李四' }
- // files 文件信息
-
- // 上传成功处理
- // 1.取原文件的后缀名 xx.jpg---> .jpg
- let extName = path.extname(files.myfile.originalFilename);
-
- // 2.生成一个新的文件
- let oldPath = files.myfile.filepath; // 旧路径
- let newPath = oldPath + extName;
-
- // 把组合成的新文件写入要存的文件夹
- fs.renameSync(oldPath, newPath);
- res.send("上传成功");
- })
- });
express是nodejs中的顶级框架结构,是一个款非常省事,非常好用的一款框架,在市面上占据了非常大的市场份额,所以掌握好express的框架知识点是每一位前端和后端的任务。