开发网售系统时使用 webpack-dev-server 的 proxy 遇到的问题

1、问题:

由于后端 cookie 改造,导致本地开发环境使用 webpack-dev-server 的 proxy 代理请求失败;

检查发现登录接口返回的响应头中 set-cookie 设置了 domain,由于项目在本地跑的时候是 localhost,和接口的域名不一致,就导致了浏览器无法保存 cookie,请求失败。

2、解决:

webpack-dev-server 的 proxy 里面有一个 onProxyRes 函数(可以在代理收到请求之后将数据发给浏览器之前做一层拦截),在这里使用正则匹配,把 set-cookie 返回的 domain 修改为 localhost。

// 将 domain 设置为 localhost

cookie.replace(/domain=\.?vistacloud.cn/i, 'domain=localhost');

这样浏览器就可以把 cookie 保存下来,同时在请求的时候也把 cookie 发送出去。

3、总结:

前端问题有可能是后端改动导致的,所以定位到问题后及时与后端沟通。

proxy: [
        {
            context: ['/vep-manager', '/vep1'],
            target: 'http://sit.vep.vistacloud.cn/',
            changeOrigin: true,
            onProxyRes: function (proxyRes, req, res) {
                var cookies = proxyRes.headers['set-cookie'];
                // 返回的cookie中提取domain
                var cookieRegex = /domain=\.?vistacloud.cn/i;
                //修改cookie Path
                if (cookies) {
                    var newCookie = cookies.map(function (cookie) {
                        if (cookieRegex.test(cookie)) {
                            // 将domain设置为localhost
                            return cookie.replace(cookieRegex, 'domain=localhost');
                        }
                        return cookie;
                    });
                    delete proxyRes.headers['set-cookie'];
                    proxyRes.headers['set-cookie'] = newCookie;
                }
            }
        },
    ],

Webpack-dev-server是一个轻量级的开发服务器,它能够实编译你的Webpack打包项目,同提供热加载功能,让你在开发过程中无需刷新页面就能看到代码改动的影响。以下是Webpack-dev-server的一些常见配置选项: 1. **host**: 设置服务器监听的地址,默认为localhost,你可以设置成"0.0.0.0"让其监听所有络接口。 ```javascript devServer: { host: '0.0.0.0' } ``` 2. **port**: 设定服务器监听的端口,默认为8080,可以根据需要更改。 ```javascript devServer: { port: 3000 } ``` 3. **hot**: 启用热加载,当代码修改后自动替换已存在的模块,而不是刷新整个页面。 ```javascript devServer: { hot: true } ``` 4. **publicPath**: 配置生成的静态资源URL前缀,对于CSS和JS等资源的引用路径。 ```javascript devServer: { publicPath: '/dist/' } ``` 5. **proxy**: 当你需要代理其他服务器的请求,可以使用此配置。 ```javascript devServer: { proxy: { '/api': { target: 'http://example.com/api', pathRewrite: { '^/api': '' }, secure: false // 如果目标服务器需要HTTPS,则设为true } } } ``` 6. **inline**: 内嵌模式,直接在浏览器中显示js代码。 ```javascript devServer: { inline: true } ``` 7. **open**: 自动在浏览器中打开服务器,方便调试。 ```javascript devServer: { open: true } ``` 8. **watchOptions**: 可以自定义Webpack的WatchOptions来控制编译行为。 配置完成后,通过`npm start`或者`yarn start`命令启动webpack-dev-server。记得在Webpack配置文件中添加相关的devServer配置到plugins部分,如`new WebpackDevServer(config)`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值