Express日志代理请求记录 | AI生成和翻译

Home 2025.07

若你在 Express 应用中使用 http-proxy-middleware,可通过其 onProxyReqonProxyRes 事件钩子记录请求参数与请求体。

以下是一个实用示例:

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();

// 在代理前解析 JSON 请求体
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.use('/api', createProxyMiddleware({
  target: 'http://example.com',
  changeOrigin: true,

  // 记录请求体与查询参数
  onProxyReq: (proxyReq, req, res) => {
    // 查询参数
    console.log('Query:', req.query);

    // 请求体(仅当在代理前完成解析时)
    if (req.body && Object.keys(req.body).length) {
      console.log('Body:', req.body);

      // 如需转发请求体(针对 POST/PUT 请求)
      const bodyData = JSON.stringify(req.body);
      proxyReq.setHeader('Content-Type', 'application/json');
      proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
      proxyReq.write(bodyData);
    }
  },

  // 记录目标服务器响应
  onProxyRes: (proxyRes, req, res) => {
    console.log(`目标服务器响应:${proxyRes.statusCode} - ${req.method} ${req.originalUrl}`);
  }
}));

app.listen(3000, () => {
  console.log('代理服务运行于 http://localhost:3000');
});

关键要点


👉 你仅需记录日志用于调试,还是希望代理在记录后转发修改后的请求体?


Back Donate