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

相关推荐
kyriewen1 天前
2026 年了,还在用 Node.js?Bun 迁移实战:20 分钟搞定,附踩坑记录
前端·javascript·node.js
donecoding2 天前
3 条命令搞定闭环 Monorepo:Lerna 版本管理 + 拓扑构建 + 自定义分发
前端·前端框架·node.js
Flynt3 天前
npm v12 来了:allowScripts 默认关闭,我的项目差点跑不起来
安全·npm·node.js
森鹿3 天前
express中间件原理以及大致实现
前端·express
叫我Paul就好4 天前
尝试 Node 搭建后端-开发框架
node.js
风止何安啊5 天前
网课倍速痛点解决:一套前端代码实现自由控速播放器
前端·javascript·node.js
糖拌西瓜皮5 天前
Node.js核心模块实战:文件、路径、HTTP与流处理
javascript·node.js
糖拌西瓜皮5 天前
Node.js工程化实践:包管理、TypeScript配置与代码质量
typescript·node.js
糖拌西瓜皮5 天前
NestJS入门指南:Java开发者的Spring Boot体验
javascript·node.js
糖拌西瓜皮5 天前
Express框架快速上手:中间件、路由与错误处理
javascript·node.js