vue3请求代理proxy中pathRewrite失效

问题引入

在vue3配置请求代理proxy的时候pathRewrite失效。

有这样一个例子,作用是为了把所有以/api开头的请求代理到后端的路径和端口上,在vue.config.js配置文件中 设置了代理跨域和默认端口。但是重新运行之后发现端口是改了,但是路径仍然没有修改,没有把我/api带头的路径重写掉

vue.config.js

vue 复制代码
devServer: {
    open: true, // opens browser window automatically
    proxy: {
        // 将所有以/api开头的请求代理到
        "/api": {
        	target: "http://localhost:8080",
            pathRewrite: {
                "^/api": "",
            },//没有任何效果
            changeOrigin: true,
        },
    },
},

控制台中无法看到转发后的路径,使用以下方法可以在浏览器控制台Response Header中看见x-res-proxyUrl转发后真实路径

vue.config.js

vue 复制代码
devServer: {
    open: true, // opens browser window automatically
    proxy: {
        // 将所有以/api开头的请求代理到
        "/api": {
        	target: "http://localhost:8080",
            pathRewrite: {
                "^/api": "",
            },//没有任何效果
            changeOrigin: true,
            // 显示请求代理后的真实地址
            bypass(req, res, options) {
                const proxyUrl = new URL(req.url || "", options.target)?.href || "";
                res.setHeader("x-res-proxyUrl", proxyUrl);
            },
        },
    },
},

解决方案

vue3中不支持pathRewrite的写法,可以修改为

vue 复制代码
rewrite: (path) => path.replace(/^\/api/, ""),

vue.config.js

vue 复制代码
devServer: {
    // https: true
    open: true, // opens browser window automatically
    proxy: {
        // 将所有以/api开头的请求代理到
        "/api": {
            target: "http://localhost:8080",
            //改成这样!!!!
            rewrite: (path) => path.replace(/^\/api/, ""),
            changeOrigin: true,
            // 显示请求代理后的真实地址
            bypass(req, res, options) {
                const proxyUrl = new URL(req.url || "", options.target)?.href || "";
                res.setHeader("x-res-proxyUrl", proxyUrl);
            },
        },
    },
},
相关推荐
空空kkk8 小时前
SpringMVC——异常
java·前端·javascript
冴羽8 小时前
涨见识了,Error.cause 让 JavaScript 错误调试更轻松
前端·javascript·node.js
m***D2868 小时前
JavaScript在Node.js中的内存管理
开发语言·javascript·node.js
我叫张小白。8 小时前
JavaScript现代语法梳理:ES6+核心特性详解
开发语言·javascript·typescript·es6
code_Bo8 小时前
Ant Design Vue 日期选择器英文不变更中文问题
前端·vue.js·ant design
啃火龙果的兔子8 小时前
react-i18next+i18next-icu使用详解
前端·javascript·react.js
1024小神8 小时前
Electron实现多tab页案例,BrowserView/iframe/webview不同方式的区别
前端·javascript·electron
U***e638 小时前
Vue自然语言
前端·javascript·vue.js
拉不动的猪9 小时前
Vue 跨组件通信底层:provide/inject 原理与实战指南
前端·javascript·面试
用户6600676685399 小时前
用 Symbol 解决多人协作中的对象属性冲突实战
前端·javascript