封装Express 自定义中间件

封装一个日志中间件

  • 记录请求方法(get/post)

  • 记录访问路径

  • 记录响应状态码

  • 记录处理耗时

  • 写入日志文件

    //logger.js
    const fs=require('fs')
    const path=require('path')
    const logFile=path.join(__dirname,'../logs/access.log')
    module.exports=(req,res,next)=>{
    const start=Date.now() //记录请求开始时间
    res.on('finish',()=>{
    const duration=Date.now()-start //计算请求耗时
    const log=[${new Date().toISOString()}]${req.method}${req.originalUrl}${res.statusCode}${duration}ms //拼接的日志内容
    fs.appendFile(logFile,log+'\n',err=>{
    if(err) console.log('写入日志失败:',err) //如果写入失败,输出错误信息
    })
    })
    next() //继续执行下一个中间件
    }

    //app.js
    const express=require('express') //引入express 框架
    const logger=require('./middleware/logger')
    const app=express() //创建应用实例
    const port=3000
    app.use(logger) //使用日志中间件
    app.get('/',(req,res)=>{
    res.send('

    首页

    ')
    })
    app.get('/about',(req,res)=>{
    res.send('

    关于我们页面

    ')
    })
    //启动服务器
    app.listen(port,()=>{
    console.log('服务器')
    })

相关推荐
码界索隆2 小时前
【腾讯位置服务开发者征文大赛】用 AI Agent + MCP 重构“周边去哪儿”决策链路:我的真实踩坑与MVP落地复盘
人工智能·typescript·node.js
weixin_419658312 小时前
RabbitMQ 应用问题
java·分布式·中间件·rabbitmq
Aolith3 小时前
从前端模拟到全栈认证:我的论坛 JWT 实战复盘
node.js·express
z小天才b3 小时前
Django ORM、中间件与信号 — 完全指南
python·中间件·django
Rabbit_QL3 小时前
【前端基础】npm install 是干嘛的(带参数 vs 不带参数)
前端·npm·node.js
阿赛工作室3 小时前
node.js使用AES加密/解密的详细教程
node.js
fuquxiaoguang3 小时前
金蝶天燕AMDC:当企业级缓存遇见Redis 8.2,国产中间件的“性能+易用”双飞跃
redis·缓存·中间件
亚空间仓鼠4 小时前
Kubernetes技术入门与实践(三):构建高效中间件服务
中间件·容器·kubernetes
Rabbit_QL4 小时前
【前端工具链小白篇】前端工具链全景:Node、npm、Vite 各管什么
前端·npm·node.js