http-proxy-middleware 不转发完整路径
http-proxy-middleware does not forward the full path
我正在尝试将 BrowserSync 配置为在服务器模式下工作,并将我的 API 请求代理到后端 运行 在同一台机器上的不同端口,使用 http-proxy-middleware.我使用 Gulp 启动 BrowserSync。
BrowserSync 运行s 在端口 8081 上。我的后端 运行s 在 8080 上。
下面是我创建代理中间件的方法:
var proxyApi = proxy('/api', {target : 'http://localhost:8080/api', logLevel : 'debug'});
这是我 运行 BrowserSync 从我的 Gulp 任务中得到的方法:
// Init BrowserSync with proxies as middleware and based on the dest dir
browserSync.init({
open: true,
port: config.proxyPort,
server: {
baseDir: config.destDir,
middleware: [proxyApi]
},
browser: "google chrome"
});
输出:
[HPM] Proxy created: /api -> http://localhost:8080/api
一切看起来都不错。
但是当我点击例如http://localhost:8081/api/users
,输出为:
[HPM] GET /api/users/123 -> http://localhost:8080/api
...我的客户端收到 404 错误,因为 /api
本身与后端的任何内容都不匹配。
根据我从文档和示例中了解到的情况,目标实际上应该是 http://localhost:8080/api/users/123
为什么路径的其余部分(在本例中为 /users/123
)被遗漏了?
使用以下版本:
"gulp": "3.9.1",
"browser-sync": "2.16.0",
"http-proxy-middleware": "0.17.1",
prependPath
选项默认为 true
。此选项由底层库提供:http-proxy.
prependPath: true/false, Default: true - specify whether you want to
prepend the target's path to the proxy path
有两种方法可以解决此问题:
1.) 将您的 target
从 'http://localhost:8080/api'
更改为 'http://localhost:8080'
var proxyApi = proxy('/api', {target: 'http://localhost:8080', logLevel: 'debug'});
2.) 或者,您可以将选项 prependPath
设置为 false
。
var proxyApi = proxy('/api', {target: 'http://localhost:8080/api', prependPath: false, logLevel: 'debug'});
我正在尝试将 BrowserSync 配置为在服务器模式下工作,并将我的 API 请求代理到后端 运行 在同一台机器上的不同端口,使用 http-proxy-middleware.我使用 Gulp 启动 BrowserSync。
BrowserSync 运行s 在端口 8081 上。我的后端 运行s 在 8080 上。
下面是我创建代理中间件的方法:
var proxyApi = proxy('/api', {target : 'http://localhost:8080/api', logLevel : 'debug'});
这是我 运行 BrowserSync 从我的 Gulp 任务中得到的方法:
// Init BrowserSync with proxies as middleware and based on the dest dir
browserSync.init({
open: true,
port: config.proxyPort,
server: {
baseDir: config.destDir,
middleware: [proxyApi]
},
browser: "google chrome"
});
输出:
[HPM] Proxy created: /api -> http://localhost:8080/api
一切看起来都不错。
但是当我点击例如http://localhost:8081/api/users
,输出为:
[HPM] GET /api/users/123 -> http://localhost:8080/api
...我的客户端收到 404 错误,因为 /api
本身与后端的任何内容都不匹配。
根据我从文档和示例中了解到的情况,目标实际上应该是 http://localhost:8080/api/users/123
为什么路径的其余部分(在本例中为 /users/123
)被遗漏了?
使用以下版本:
"gulp": "3.9.1",
"browser-sync": "2.16.0",
"http-proxy-middleware": "0.17.1",
prependPath
选项默认为 true
。此选项由底层库提供:http-proxy.
prependPath: true/false, Default: true - specify whether you want to prepend the target's path to the proxy path
有两种方法可以解决此问题:
1.) 将您的 target
从 'http://localhost:8080/api'
更改为 'http://localhost:8080'
var proxyApi = proxy('/api', {target: 'http://localhost:8080', logLevel: 'debug'});
2.) 或者,您可以将选项 prependPath
设置为 false
。
var proxyApi = proxy('/api', {target: 'http://localhost:8080/api', prependPath: false, logLevel: 'debug'});