express中间件(java拦截器)

1.什么是中间件

可以把共同需要的模块都封装起来

2.日志记录案例(全局中间件案例)

假设我们现在要记录进入首页的url和ip,那我们必须在两个路由里的回调函数里写相同的内容,那我们,可以先在外头在进入路由处理之前,先把共同工作做好,减少代码量

javascript 复制代码
const express = require('express');
const fs=require('fs');
const path=require('path');
const app = express();
//定义全局中间件
function  middle(req,res,next){
    let {url,ip}=req;
    fs.appendFileSync(path.resolve(__dirname,'./enter.log'),`${url} ${ip}\r\n`);
    //next用于继续执行路由后面的回调函数
    next();
}
//使用中间件函数
app.use(middle);
app.get('/home', (req, res) => {
   res.send('首页');
})

app.get('/bank',(req,res)=>{
    res.send('后台首页');
})

//监听端口,启动服务
app.listen(3000, () => {
    console.log('服务启动');

})

3.路由中间件案例(局部中间件)

3.1路由放行

在某些情况下我们只针对某些路由进行处理,并不需要全部处理,如果这个路由符合规则,如果中间件认为这个请求是合法的、可以继续处理的,就调用 next(),让请求"通过"

案例要求

javascript 复制代码
const express = require('express');
const fs=require('fs');
const path=require('path');
const app = express();
//定义全局中间件
let middle=(req,res,next)=>{
    if(req.query.code==='521'){
        
        next();//查询正确 放行继续执行之后的回调函数
    }
    else res.send('暗号错误');
}
app.get('/home', (req, res) => {
   res.send('首页');
})

app.get('/bank',middle,(req,res)=>{
    res.send('后台首页');
})

app.get('/setting',middle,(req,res)=>{
    res.send('设置')
})
app.all('/{*splat}',(req,res)=>{
    res.end('<h1>404 not found</h1>');
})
//监听端口,启动服务
app.listen(3000, () => {
    console.log('服务启动'); 

})

4.静态资源中间件

语法

案例

javascript 复制代码
const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
//静态资源中间
app.use(express.static(__dirname+'/public'));
app.get('/home', (req, res) => {
    res.send('首页');
})

//监听端口,启动服务
app.listen(3000, () => {
    console.log('服务启动');

})

注意事项

5.练习

相关推荐
原野池予23 分钟前
深入Java集合框架:HashMap源码解析(JDK 8)
java·开发语言
古法安卓28 分钟前
Android-Direct Boot 阶段与 getFilesDir() 路径变更问题深度分析
android·java·android studio
-今昭-32 分钟前
Logstash 管理
java·服务器·前端
测试运维日常笔记33 分钟前
VMware vSphere、ESXi 与 vCenter Server:核心概念与关系详解
java·开发语言
风流 少年1 小时前
Spring AI 2.0:Flux
java·人工智能·spring
m0_547486661 小时前
《面向对象与Java程序设计》全套PPT课件2026
java·开发语言
jason成都1 小时前
ignav-next|Java 层封装 GNSS/INS 组合导航框架,隔离 RTKLIB 与 INS 内核,双模块独立演进、最小侵入
java·开发语言
抓不住时间的沙1 小时前
butterfly主题美化,打造属于自己的个性博客
java·开发语言·前端·javascript·node.js·github
Zane19941 小时前
从一个发短信的类到多态调用:封装、继承、多态到底是怎么长出来的
java·后端
MarkHD1 小时前
Stable Diffusion入门第19-20天:保存与分享你的工作流——第一阶段收官,从“能用”到“可复用”
java·开发语言·stable diffusion