vue的vue.config中proxy代理post请求ECONNRESET

环境

vue 2.6.11、vue/cli 4.4.0、Typescript 3.9.3


遇到的问题

在开发模式下,接口默认用mock进行请求。在匹配到api字符串开头的请求,则通过代理请求到真实接口http://106.xx.xxx.xxx:8080
vue.config.js

// webpack-dev-server 相关配置
  devServer: {
    host: 'localhost',
    port: 3001,
    overlay: {
      warnings: false,
      errors: true
    },
    proxy: {
      '/api': {
        target: 'http://106.xx.xxx.xxx:8080',
        changeOrigin: true,
      }
    },
    before: require('./mock/mock-server.js')
  },

此时,get请求是可以通过的(错误是后台报的,正常错误)。
在这里插入图片描述
如果是post请求的话,会报node层面的错误ECONNRESET
在这里插入图片描述
注释掉代理的配置,通过正常的post请求去请求真实api,是能够正常成功的。

分析

在数据接收方面有问题。因为正常post是能够成功的,说明接口没问题。代理后get请求也能够成功,说明代理配置上是没有问题的。所以只有可能是代理后post的数据格式上有问题。

解决方案

参考 https://github.com/chimurai/http-proxy-middleware/issues/40

vue.config.js

  // webpack-dev-server 相关配置
  devServer: {
    host: 'localhost',
    port: 3001,
    overlay: {
      warnings: false,
      errors: true
    },
    proxy: {
      '/api': {
        target: 'http://106.xx.xxx.xxx:8088',
        changeOrigin: true,
        onProxyReq:function (proxyReq, req, res, options) {
          if (req.body) {
            let bodyData = JSON.stringify(req.body);
            // incase if content-type is application/x-www-form-urlencoded -> we need to change to application/json
            proxyReq.setHeader('Content-Type','application/json');
            proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
            // stream the content
            proxyReq.write(bodyData);
          }
        }
      }
    },
    before: require('./mock/mock-server.js')
  },

代理的post请求成功,撒花~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值