封装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('服务器')
    })

相关推荐
Trouvaille ~2 小时前
【Redis篇】Redis 哨兵(Sentinel):高可用自动故障转移
数据库·redis·缓存·中间件·sentinel·高可用·哨兵
winfredzhang4 小时前
Node.js + SQLite 实战:本地 Markdown 阅读书架源码深度解析
sqlite·node.js·safari·分页·多媒体·md文档
码云之上4 小时前
聊聊如何设计一个高效、稳定的 Node.js 接入层
前端·后端·node.js
constCpp14 小时前
深入理解内存管理
后端·中间件·架构
To_OC15 小时前
折腾两天 HTTP 接口调用,终于把 fetch 和前后端分离从书本概念落地到实操了
javascript·node.js·全栈
zhangfeng113316 小时前
workbuddy ,node.js 每次会在 项目目录上安装 node_modules,能不能一次安装多次使用,为什么 npm 不把包装在全局
前端·npm·node.js
之歆16 小时前
Day06_Node.js 核心技术深度解析
node.js·编辑器·vim
之歆16 小时前
Day07_Node.js 深度解析:从模块系统到文件操作全指南
node.js
胖胖雕17 小时前
LLM增强的网易云API部署用于鸿蒙原生音乐app: Melotopia
docker·node.js·harmony
meilindehuzi_a1 天前
全栈 AI 必修课:基于 Node.js 与 LLM 的渐进式提示词工程实践
人工智能·node.js·prompt