Webpack dev server Webpack dev服务器代理路由器选项没有';行不通

Webpack dev server Webpack dev服务器代理路由器选项没有';行不通,webpack-dev-server,vue-cli,http-proxy-middleware,Webpack Dev Server,Vue Cli,Http Proxy Middleware,我正在使用Vue CLI设置应用程序。我来配置webpack dev server的代理,将请求代理到某个端点。代理到哪个端点取决于某些请求参数 根据http代理文档,我应该能够使用router选项(而不是target属性,但是target属性是webpack dev server所必需的)来实现这一点。以下是我的代理配置的最低版本: { 开发服务器:{ 端口:8080, 主机:“localhost”, 代理:{ “/api”:{ 目标:'http://localhost:8000', 路由器:

我正在使用Vue CLI设置应用程序。我来配置
webpack dev server
的代理,将请求代理到某个端点。代理到哪个端点取决于某些请求参数

根据
http代理
文档,我应该能够使用
router
选项(而不是
target
属性,但是
target
属性是
webpack dev server
所必需的)来实现这一点。以下是我的代理配置的最低版本:

{
开发服务器:{
端口:8080,
主机:“localhost”,
代理:{
“/api”:{
目标:'http://localhost:8000',
路由器:功能(req){
console.log('代理路由器',请求主机名);
返回'http://localhost:7000';
},
},
},
}
}
我希望在这里发生的是对
http://localhost:8080/api
将被代理到
http://localhost:7000
。实际发生的情况是,它试图将请求代理到
target
选项中配置的端点

为了说明这一点,以下是控制台输出:

代理路由器本地主机

代理错误:无法将本地主机8080的请求/api/测试代理到http://localhost:8000/.

有关更多信息,请参阅(ECONREFUSE)

它执行router函数(如上面控制台日志输出所示),但它似乎只是忽略结果和目标端点的代理。根据
http代理
文档,使用
路由器
选项时不需要
target
选项,因此如果可以,我会将其删除,但是
webpack dev server
本身需要设置
target
选项并将其作为有效的URI


如何让代理使用
webpack dev server
中的路由器功能?

这似乎是底层
http代理中间件的问题。尽管该配置成功地将请求代理到
/api
http://localhost:7000
,如果代理请求失败,则记录原始的
目标

const target=(this.proxyOptions.target,如有)。主机| | this.proxyOptions.target;
常量错误消息=
“[HPM]尝试将请求%s从%s代理到%s(%s)(%s)”时出错;

如果将日志级别调高,可以看到它正在使用所需的目标:

“/api”:{
目标:'http://localhost:8000',
路由器:函数(){
返回'http://localhost:7000';
},
日志级别:“调试”,
},
[HPM]路由器新目标:http://localhost:8000 -> "http://localhost:7000"
[HPM]GET/api=>http://localhost:7000
尝试将本地主机8080的请求/api代理到时发生[HPM]错误http://localhost:8000 (经济学)(https://nodejs.org/api/errors.html#errors_common_system_errors)

看起来是这样。

我怀疑它正在工作,但如果请求失败(或者返回到原始的
目标,不确定),则反馈是不正确的。如果我使用基本的
“/api”:{“target”:”http://localhost:4321,“路由器”:()=>“http://localhost:3100“}
in,例如,当后端在3100上运行时,它工作正常,但当后端关闭时,它会报告无法代理到4321。谢谢,确实如此。欢迎您将其作为答案发布,我会将其标记为已接受。