中间件(express)

中间件(express)

在Express.js中,中间件(Middleware)是一个重要的组成部分,用于处理HTTP请求和响应。中间件函数具有特定的签名,并可以接受请求对象(req)、响应对象(res)以及一个可选的next函数作为参数。

中间件函数可以对请求和响应对象执行各种任务,例如执行身份验证、解析数据、压缩响应等。如果中间件函数没有结束请求-响应循环(例如,没有调用res.end()或res.send()),那么它应该调用next()函数将控制权传递给下一个中间件。
下面是一个Express中间件的基本示例:

javascript 复制代码
const express = require('express');  
const app = express();  
  
// 中间件函数  
function logger(req, res, next) {  
  console.log('Logging:', req.method, req.url);  
  next(); // 调用下一个中间件  
}  
  
// 另一个中间件函数,用于检查用户是否已登录  
function authenticate(req, res, next) {  
  // 假设我们有一个检查用户是否已登录的方法  
  const isAuthenticated = req.isAuthenticated(); // 伪代码  
  if (isAuthenticated) {  
    next(); // 用户已登录,继续处理  
  } else {  
    res.status(401).send('Unauthorized'); // 用户未登录,返回401状态码  
  }  
}  
  
// 路由处理程序  
function homePage(req, res) {  
  res.send('Home Page');  
}  
  
// 使用中间件  
app.use(logger); // 应用于所有请求  
  
// 特定路由的中间件  
app.get('/protected', authenticate, homePage); // 先进行身份验证,再访问主页  
  
// 未保护的路由  
app.get('/', homePage); // 直接访问主页  
  
// 启动服务器  
app.listen(3000, () => {  
  console.log('Server started on port 3000');  
});```

**1)内置中间件**

使用中间件,设置静态文件的路径及访问;

```javascript
app.use(express.static(path.join(__dirname,"./public")))

(2)自定义中间件

javascript 复制代码
app.use((req,res,next)=>{
    if(req.url=="/"){
        res.end("index")//index.html文件
    }else{
        next()
    }
})
app.use((req,res,next)=>{
    if(req.url=="/list"){
        res.end("list")//list.html文件
        
    }
    else{
        next()
    }
})

app.use((req,res,next)=>{
    if(req.url=="/order"){
        res.end("order")//order.html文件
    }
})

(3)第三方中间件

使用官网资源中的中间件==》》》body-parser

javascript 复制代码
cnpm install body-parser -s

代码:

javascript 复制代码
const bodyParse = require("body-parser");

app.use(express.static(path.join(__dirname, "./public")))
app.use(bodyParse.urlencoded({ extended: false }))

使用post

javascript 复制代码
app.post("/list",(req,res)=>{
    let{username,age}=req.body;

    res.json({
         username,
         age
    })
})

使用get

javascript 复制代码
app.get("/user", (req, res) => {
    let { username, age } = req.body;
    console.log({ username, age });
    res.json({
        username,
        age
    })

})

(4)路由中间件

在这个例子中,logRequest中间件被应用于所有路由,因为我们将它添加为应用程序级别的中间件(使用app.use())。然后,我们定义了一个路由(/)并附加了一个处理程序(homePage)。当有人访问/路由时,他们首先会触发logRequest中间件,然后才会触发homePage处理程序。

javascript 复制代码
const express = require('express');  
const app = express();  
  
// 这是一个简单的中间件函数,用于记录每个请求的URL  
function logRequest(req, res, next) {  
  console.log(`Request URL: ${req.url}`);  
  next(); // 调用下一个中间件或路由处理程序  
}  
  
// 这是一个路由处理程序  
function homePage(req, res) {  
  res.send('Home Page');  
}  
  
// 使用中间件函数  
app.use(logRequest); // 这个中间件将应用于所有路由  
  
// 定义路由并附加处理程序  
app.get('/', homePage);  
  
// 启动服务器  
app.listen(3000, () => {  
  console.log('Server started on port 3000');  
});
相关推荐
SunnyRivers5 天前
LangChain中间件详解
中间件·langchain
金刚猿5 天前
06_虚拟机中间件部署_xxl-job 部署
中间件·xxl-job·xxl-job-admin
Loo国昌6 天前
【AI应用开发实战】Guardrail风险控制中间件:Agent系统的安全防线
人工智能·python·安全·自然语言处理·中间件·prompt
键盘鼓手苏苏6 天前
Flutter for OpenHarmony: Flutter 三方库 ntp 精准同步鸿蒙设备系统时间(分布式协同授时利器)
android·分布式·算法·flutter·华为·中间件·harmonyos
下北沢美食家7 天前
Express框架入门
开发语言·javascript·express
Coder_Boy_7 天前
Java后端核心技术体系全解析(个人总结)
java·开发语言·spring boot·分布式·spring cloud·中间件
CN-David7 天前
CentOS搭建Mycat中间件
linux·mysql·中间件·centos·mariadb
三水不滴8 天前
消息队列消费性能优化:批量消费 + 手动 ACK 提升吞吐量
经验分享·笔记·中间件·性能优化
nix.gnehc8 天前
Go进阶攻坚+专家深耕级学习清单|聚焦高并发、高性能中间件/底层框架开发(Java开发者专属)
学习·中间件·golang
金刚猿9 天前
05_虚拟机中间件部署_ubuntu 系统 安装 Redis 7.0.15
redis·ubuntu·中间件