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




