You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

React配置Node代理遇http-proxy-middleware报错:proxy is not a function

问题原因分析

你的报错proxy is not a function其实是http-proxy-middleware版本更新导致的导出方式变更。从v1.0.0版本开始,这个包不再直接导出proxy函数,而是需要通过createProxyMiddleware来创建代理实例——你的代码还是用了旧版本的写法,所以才会报这个错。

解决方案:修改setupProxy.js代码

直接把你的setupProxy.js改成下面的写法,适配新版本的http-proxy-middleware:

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

module.exports = function(app) {
  app.use('/api', createProxyMiddleware({ 
    target: 'http://localhost:6000', 
    changeOrigin: true 
  }));
};

改完之后重启你的React开发服务,应该就能正常代理了。

备选方案:降级到兼容旧写法的版本

如果你不想修改代码,也可以降级http-proxy-middleware到v0.x版本(比如v0.21.0,这个版本是最后一个支持直接导出proxy函数的稳定版本),执行下面的命令:

npm install http-proxy-middleware@0.21.0 --save-dev

降级完成后,你的原有setupProxy.js代码就能正常工作了。

额外检查项

除了版本问题,还有几个点可以确认一下,避免后续踩坑:

  • 确保你的Node.js服务确实运行在6000端口(server.js里设置的是port = process.env.PORT || 6000,如果没有环境变量的话就是6000)
  • 客户端的API请求路径要以/api开头,比如fetch('/api/auth'),这样才会被代理到后端服务
  • 如果之前用package.json的proxy字段失效,大概率是因为你的需求超出了create-react-app内置proxy的能力(比如需要代理多个路径、自定义headers等),用http-proxy-middleware是更灵活的选择

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

火山引擎 最新活动