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. 静态资源和路由规则,谁先匹配就优先响应谁也可以理解为谁先执行谁先响应。例如:
    这样就会优先访问到首页这个页面。
相关推荐
苦瓜小生9 分钟前
【前端】|【js手撕】经典高频面试题:手写实现function.call、apply、bind
java·前端·javascript
和沐阳学逆向32 分钟前
我现在怎么用 CC Switch 管中转站,顺手拿 Codex 举个例子
开发语言·javascript·ecmascript
kgduu3 小时前
js之客户端存储
javascript·数据库·oracle
四千岁3 小时前
2026 最新版:WSL + Ubuntu 全栈开发环境,一篇搞定!
javascript·node.js
竹林8183 小时前
从“连接失败”到丝滑登录:我用 ethers.js 连接 MetaMask 的完整踩坑实录
前端·javascript
神舟之光3 小时前
jwt权限控制简单总结(乡村意见簿-vue-express-mongdb)
前端·vue.js·express
铭毅天下3 小时前
EasySearch Rules 规则语法速查手册
开发语言·前端·javascript·ecmascript
bjzhang753 小时前
使用 HTML + JavaScript 实现 SQL 智能补全功能
javascript·html·sql智能补全
全栈前端老曹4 小时前
【前端地图】地图开发基础概念——地图服务类型(矢量图、卫星图、地形图)、WGS84 / GCJ-02 / BD09 坐标系、地图 SDK 简介
前端·javascript·地图·wgs84·gcj-02·bd09·地图sdk
Fairy要carry5 小时前
项目01-手搓Agent之loop
前端·javascript·python