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

使用express+http-proxy-middleware代理受保护资源遇404问题排查

Express + http-proxy-middleware 代理受保护资源出现404错误排查

我尝试用Express结合http-proxy-middleware代理一个远程受保护资源,但代理无法正常工作。访问本地URL http://localhost:3030/api/employees 时出现404错误:

No webpage was found for the web address: http://localhost:3030/api/employees

以下是我的配置代码:

server.js:

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
    
const app = express();
app.use(express.json());
    
app.use('/api/employees', 
    createProxyMiddleware(
        {
            target: `https://api.bamboohr.com/api/gateway.php/${process.env.BAMBOOHR_API_SUBDOMAIN}/v1/employees/directory`,
            changeOrigin: true,
            headers: {
                Accept: 'application/json',
                Authorization: "Basic " + Buffer.from(process.env.BAMBOOHR_API_KEY + ":password").toString('base64')
            },
            logger: console,
        }
    )
);
    
app.listen(3030, 'localhost', () => {
    console.log('Service running');
});

package.json:

{
  "dependencies": {
    "express": "^4.18.2",
    "http-proxy-middleware": "^2.0.6"
  }
}

请问我哪里配置出错了?


问题排查与修复

你的配置存在两个核心问题:

  1. target路径配置错误
    http-proxy-middleware的target应指定远程API的基础根路径,而非完整接口路径。当前你把/v1/employees/directory写入target,会导致代理时将本地路径/api/employees拼接到该完整路径后,最终请求的远程地址变成:
    https://api.bamboohr.com/api/gateway.php/[你的子域名]/v1/employees/directory/api/employees
    该路径不存在,因此返回404。

    正确的target应仅保留API根路径:

    target: `https://api.bamboohr.com/api/gateway.php/${process.env.BAMBOOHR_API_SUBDOMAIN}/v1`,
    
  2. 缺少路径重写配置
    本地请求路径是/api/employees,但远程接口实际路径是/employees/directory,需通过pathRewrite完成路径映射:

    pathRewrite: {
      '^/api/employees': '/employees/directory'
    }
    

修正后的完整server.js

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
    
const app = express();
app.use(express.json());
    
app.use('/api/employees', 
    createProxyMiddleware(
        {
            target: `https://api.bamboohr.com/api/gateway.php/${process.env.BAMBOOHR_API_SUBDOMAIN}/v1`,
            changeOrigin: true,
            pathRewrite: {
              '^/api/employees': '/employees/directory'
            },
            headers: {
                Accept: 'application/json',
                Authorization: "Basic " + Buffer.from(process.env.BAMBOOHR_API_KEY + ":password").toString('base64')
            },
            logger: console,
        }
    )
);
    
app.listen(3030, 'localhost', () => {
    console.log('Service running');
});

额外注意事项

  • 确保process.env.BAMBOOHR_API_SUBDOMAIN和process.env.BAMBOOHR_API_KEY环境变量已正确配置,否则会导致target路径无效或授权失败。
  • 利用logger: console查看代理日志,可确认最终请求的远程地址是否正确,便于进一步排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:35:45