You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js中如何获取浏览器地址栏路径(排除静态资源请求)

解决方案

方法1:调整中间件挂载顺序(最简便)

Express 中间件按注册顺序执行,express.static 匹配到静态资源后会直接返回资源并结束响应,不会进入后续中间件。只要把静态资源中间件注册在日志中间件前面即可,静态资源请求不会被日志中间件捕获:

const express = require('express');
const app = express();
// 先注册静态资源处理中间件
app.use(express.static('public'));
// 再注册日志中间件,仅非静态资源请求会走到这里
const requestLog = require('./你的日志中间件文件路径');
app.use(requestLog);
// 后续注册业务路由
app.get('/', (req, res) => {
  res.send('首页');
})

方法2:在日志中间件内过滤静态资源请求

如果你的静态资源分散存储、或调整中间件顺序会影响其他逻辑,可以直接在日志中间件内添加静态后缀过滤规则:

const fs = require('fs');
// 定义需要排除的静态资源后缀列表,可根据自己的业务场景增减
const staticExts = ['.css', '.js', '.png', '.jpg', '.jpeg', '.gif', '.svg', '.ico', '.woff', '.woff2', '.ttf', '.eot', '.webp', '.mp3', '.mp4'];

module.exports = function (req, res, next) {
  // 校验当前请求是否为静态资源请求
  const isStaticReq = staticExts.some(ext => req.originalUrl.toLowerCase().endsWith(ext));
  if (!isStaticReq) {
    // 注意:原代码writeFileSync会覆盖历史日志,改为appendFileSync实现追加写入
    fs.appendFileSync('log.txt', req.originalUrl + '\n');
  }
  next();
}

注意事项:如果你有业务路由的路径刚好以上述静态后缀结尾,方法2会出现误过滤,优先推荐使用方法1,逻辑更准确。如果你的应用是SPA单页应用且使用哈希路由(地址带#),#后的内容不会发送到服务端,属于HTTP协议默认规则,服务端无法获取#后的路径部分。

内容的提问来源于stack exchange,提问作者Javi Herrera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:09:04