node-js Express中间件

中间件介绍

  1. 什么是中间件
    中间件其本质就是一个回调函数,可以像路由一样访问请求对象(request)响应对象(response)
  2. 中间件的作用是什么
    通过函数封装公共操作,简化代码
  3. 中间件类型
    • 全局中间件
    • 路由中间件

全局中间件的实现

例子:简单实现一个log日志,记录每次访问url地址及时间

js 复制代码
	const express = require('express')
	const path = require('path')
	const fs = require('fs')
	const app = express()
	// 声明中间件函数
	function middlewarw(req,res,next) {
	    let {url} = req
	    // 加这一步是因为默认会先访问favicon.ico文件,为了显示跳过对 favicon.ico 的处理
	    if (url === '/favicon.ico') {
	        return next();
	    }
	    // 获取时间
	    const now = new Date();
	    // 简便用了toISOString()方法,复杂的处理可以使用dayjs
	    const timestamp = now.toISOString().replace('T', ' ').slice(0, 19);
	    // 通过fs模块将记录写入文件
	    fs.appendFileSync(path.resolve(__dirname+'/record.log'),`${url} ${timestamp}\r\n`)
	    // next是为了上面执行完成后 继续执行后续的方法
	    next()
	}
	// 声明完成中间件要通过下面方式调用
	app.use(middlewarw)
	
	app.get('/index',(req,res)=>{
	    res.send('首页')
	})
	app.get('/admin',(req,res)=>{
	    res.send('管理系统首页')
	})
	// 错误处理
	app.all('*',(req,res)=>{
	    res.send('<h1>404</h1>')
	})
	// 监听端口
	app.listen('3000',()=>{
	    console.log('启动成功');  
	})

上面的逻辑就实现了一个全局中间件,这样即便有再多的访问路径,也都会被记录到log文件中。

运行程序会看到当前目录下会生成一个log文件,打开文件查看内容,就会看到我们想要的结果

路由中间件

实现一个简单的路由中间件(示例),与全局路由不同的是中间件函数要放到路由中执行

js 复制代码
const express = require('express')

const app = express()

// 中间件函数
const routeMiddlewarw = (req,res,next)=> {
    // 假设访携带code值1则有访问权限
    if(req.query.code === '1'){
        // 继续执行后续
        next()
    }else{
        res.send('没问访问权限')
    }
}

// 中间件函数 放到第二个参数执行
app.get('/index',routeMiddlewarw,(req,res)=>{
    res.send('首页')
})

app.get('/admin',routeMiddlewarw,(req,res)=>{
    res.send('管理系统首页')
})

app.all('*',(req,res)=>{
    res.send('<h1>404</h1>')
})

app.listen('3000',()=>{
    console.log('启动成功'); 
})

实际运行前后对比

静态资源中间件

创建静态目录

在html中引用css

js 复制代码
const express = require('express')
const app = express()

// 设置静态资源中间件
app.use(express.static(__dirname + '/publick'))

// 路由
app.get('/',(req,res)=>{
    res.send('首页')
})

app.all('*',(req,res)=>{
    res.send('<h1>404</h1>')
})

app.listen('3000',()=>{
    console.log('启动成功'); 
})

启动之后访问3000端口

也可以尝试这样访问

注意事项

  1. index.html文件,是默认打开的资源文件,比如http:localhost:3000,这样直接就访问到了index.html
  2. 静态资源和路由规则,谁先匹配就优先响应谁也可以理解为谁先执行谁先响应。例如:
    这样就会优先访问到首页这个页面。
相关推荐
摸着石头过河的石头1 小时前
Service Worker 深度解析:让你的 Web 应用离线也能飞
前端·javascript·性能优化
不爱吃糖的程序媛2 小时前
Electron 如何判断运行平台是鸿蒙系统(OpenHarmony)
javascript·electron·harmonyos
Hilaku2 小时前
我用AI重构了一段500行的屎山代码,这是我的Prompt和思考过程
前端·javascript·架构
Cxiaomu2 小时前
React Native App 自动检测版本更新完整实现指南
javascript·react native·react.js
掘金安东尼3 小时前
前端周刊第439期(2025年11月3日–11月9日)
前端·javascript·vue.js
起这个名字3 小时前
微前端应用通信使用和原理
前端·javascript·vue.js
鹏多多4 小时前
Web使用natapp进行内网穿透和预览本地页面
前端·javascript
钱端工程师4 小时前
uniapp封装uni.request请求,实现重复接口请求中断上次请求(防抖)
前端·javascript·uni-app
茶憶4 小时前
uni-app app移动端实现纵向滑块功能,并伴随自动播放
javascript·vue.js·uni-app·html·scss
茶憶4 小时前
uniapp移动端实现触摸滑动功能:上下滑动展开收起内容,左右滑动删除列表
前端·javascript·vue.js·uni-app