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

网站开发专业就业前景今天最新的新闻头条新闻

网站开发专业就业前景,今天最新的新闻头条新闻,免费自助建站网站一览自助建站平台,网址修改1. 中间件是什么? 想象中间件就像一个"加工流水线",请求(Request)从进入服务器到返回响应(Response)的过程中,会经过一个个"工作站"进行处理。 简单定义:中间件是能够访问请求对象(req)、响应对象(res)和下…

1. 中间件是什么?

想象中间件就像一个"加工流水线",请求(Request)从进入服务器到返回响应(Response)的过程中,会经过一个个"工作站"进行处理。

简单定义:中间件是能够访问请求对象(req)、响应对象(res)和下一个中间件函数(next)的函数。

2. 基本结构

一个最基本的中间件函数长这样:

function myMiddleware(req, res, next) {// 对req或res做一些处理console.log('这是中间件');next(); // 告诉Express转到下一个中间件
}

3. 中间件的工作原理

Express应用的请求处理流程就像这样:

请求 → 
中间件1 → 
中间件2 → 
... → 
路由处理器 → 
响应

每个中间件可以:

  • 执行任何代码
  • 修改请求和响应对象
  • 结束请求-响应循环
  • 调用下一个中间件

类型:

类型示例特点
应用级app.use()对所有请求生效
路由级router.use()仅对特定路由生效
错误处理app.use((err, req, res, next))必须4个参数
内置express.json()Express提供
第三方body-parser社区贡献

关键点

  • 每个中间件通过调用next()将控制权传递给下一个
  • 如果不调用next(),请求处理会终止
  • 错误处理中间件需要4个参数:(err, req, res, next)

4. 实际例子:记录请求日志

const express = require('express');
const app = express();// 自定义日志中间件
app.use((req, res, next) => {console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);next(); // 必须调用next()才能继续
});app.get('/', (req, res) => {res.send('首页');
});app.listen(3000);

看下日志:

5. 中间件类型

应用级中间件

// 对所有路由生效
app.use(myMiddleware);// 对特定路由生效
app.use('/admin', adminMiddleware);

路由级中间件

router.use(middlewareFunction);

内置中间件

app.use(express.json()); // 解析JSON请求体
app.use(express.urlencoded({ extended: true })); // 解析表单数据
app.use(express.static('public')); // 静态文件服务

错误处理中间件

// 注意有4个参数
app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send('出错了!');
});

第三方中间件

const morgan = require('morgan');
app.use(morgan('dev')); // 日志中间件

6. 中间件执行顺序练习

app.use((req, res, next) => {console.log('第一');next();
});app.use((req, res, next) => {console.log('第二');next();
});app.get('/', (req, res) => {console.log('最后');res.send('完成');
});

7. 重要原则

  1. 顺序很重要:中间件按添加顺序执行
  2. 必须调用next():除非你想终止流程
  3. 错误处理中间件:必须放在最后
  4. 可以修改req/res:后面的中间件会看到修改

8. 练习

        8.1. 记录请求耗时的中间件

const express = require('express');
const app = express();// 记录请求耗时的中间件
app.use((req, res, next) => {const startTime = Date.now(); // 记录开始时间// 在响应结束时计算耗时res.on('finish', () => {const duration = Date.now() - startTime;console.log(`${req.method} ${req.url} - ${duration}ms`);});next(); // 继续处理请求
});// 测试路由
app.get('/', (req, res) => {// 模拟耗时操作setTimeout(() => {res.send('首页');}, 300);
});app.listen(3000, () => {console.log('服务器运行在 http://localhost:3000');
});

          8.2. 记录请求耗时的中间件

//  验证API密钥的中间件
const express = require('express');
const app = express();// API密钥验证中间件
const apiKeyValidator = (req, res, next) => {const validApiKeys = ['123-abc', '456-def', '789-ghi'];const apiKey = req.headers['x-api-key'] || req.query.apiKey;if (!apiKey) {return res.status(401).json({ error: '缺少API密钥' });}if (!validApiKeys.includes(apiKey)) {return res.status(403).json({ error: '无效的API密钥' });}console.log(`API密钥验证通过: ${apiKey}`);next(); // 验证通过
};// 受保护的路由
app.get('/protected', apiKeyValidator, (req, res) => {res.json({ message: '你已访问受保护的内容' });
});// 测试方式:
// 1. curl http://localhost:3000/protected?apiKey=123-abc
// 2. curl -H "x-api-key: 123-abc" http://localhost:3000/protectedapp.listen(3000);

        8.3. 组合多个中间件

const express = require('express');
const app = express();// 中间件1: 记录请求信息
const requestLogger = (req, res, next) => {console.log(`[${new Date().toISOString()}] ${req.ip} ${req.method} ${req.path}`);next();
};// 中间件2: 验证用户身份
const userAuth = (req, res, next) => {// 模拟用户验证const isAuthenticated = Math.random() > 0.3; // 70%概率通过if (isAuthenticated) {req.user = { id: 123, name: '示例用户' }; // 附加用户信息到请求对象next();} else {res.status(401).send('请先登录');}
};// 中间件3: 检查管理员权限
const adminCheck = (req, res, next) => {if (req.user && req.user.isAdmin) {next();} else {res.status(403).send('需要管理员权限');}
};// 组合使用多个中间件
app.get('/profile', requestLogger, userAuth, (req, res) => {res.send(`欢迎, ${req.user.name}`);}
);app.get('/admin', requestLogger, userAuth, adminCheck, (req, res) => {res.send('管理员面板');}
);// 测试路由
app.get('/public', requestLogger, (req, res) => {res.send('公开内容');
});app.listen(3000);

本节到这里就结束了,下节将讲解进阶版中间件。

Express中间件(Middleware)详解:从零开始掌握(2)-CSDN博客

http://www.dtcms.com/wzjs/229362.html

相关文章:

  • 广告设计与制作学啥seo排名赚靠谱吗
  • 营销网站建设哪家便宜免费的个人网站怎么做
  • 12380网站建设情况的报告东莞百度快速排名
  • 做一些网站犯法么seo权重优化
  • 厦门网站设计公司推荐技能培训网站
  • 成人网站建设成本微博推广
  • 苏州设计网站seo如何优化关键词
  • 新工商名录企业应用平台厦门seo培训
  • 安康网站建设政府网络广告案例
  • 手机网站建立网络整合营销的特点有
  • 给你一个新的网站怎么做谷歌官方seo入门指南
  • 操作简单网站搭建费用百度站长工具seo综合查询
  • 英文b2b网站制作南宁seo产品优化服务
  • 梧州网站建设费用网页制作的软件
  • 怎样在手机做自己的网站海外推广方法有哪些
  • 域名注册费用seo推广专员招聘
  • 网页设计作业网站关键词优化排名用哪个软件比较好
  • 海报设计网站免费推广方案框架
  • 网站备案 类型中国 日本 韩国
  • 如何组建做网站的团队seo网站优化工具
  • 网站开发图国家免费技能培训平台
  • 郑州高端网站案例怎么样做一个自己的网站
  • 化妆品网站的设计与实现广州排前三的seo公司
  • 网站版建设网络营销策划书的主要内容
  • 济南b2c网站建设2022年最好用的搜索引擎
  • dedecms怎么部署网站百度一下百度一下
  • 东莞凤岗网站制作手游代理加盟哪个平台最强大
  • 三联网站建设价格省好多会员app
  • 国内做文玩的网站网站快速搜索
  • 本地唐山网站建设steam交易链接在哪复制