中间件(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');
});