post成功访问,但vue代理之后500报错

最近对接一个post请求的接口,postman上可以成功访问,但是在前端代理之后就是浏览器接口就是返回500,如下图:

找了很多办法去解决,这里提供一下思路:

1,传递参数问题,post请求的params参数和data参数是的请求方式是有区别的。(以axios为例)

//params参数
axios({url:'/token',method:'post',params:{key1:value1,key2:value2}}).then(res=>{
  console.log(res)
})

//data参数
axios.post('/oauth/token',{key1:value1,key2:value2}).then(res=>{
  console.log(res)
})

2,请求头Content-Type的问题

有可能是请求头的Content-Type值与后端写的对不上,需要跟后端沟通。

这里提供一个在网上搜寻到的大佬写的一个在响应头里面查看真实接口访问地址的方法,就是下面的bypass函数,在vite.config.ts文件中添加之后就可以在接口的响应头里面看到了:

server:{
    host: true,
    proxy:{
      '/api':{
        target:"你的代理地址",
        changeOrigin:true,
        rewrite: (p: string) => p.replace(/^\/api/, ''),
        bypass(req, res,options){
          const proxyUrl = new URL(options.rewrite(req.url) || '', (options.target) as string)?.href || '';
          res.setHeader("x-req-proxyUrl",proxyUrl)
        }
      }
    }
  }

上述方法都没有解决我的问题,最后找了公司的大佬请教才得知,代理到http和https是不同的,我代理的地址是https,需要有个配置:secure:false!

server:{
    host: true,
    proxy:{
      '/api':{
        target:"你的代理地址",
        changeOrigin:true,
        secure:false,
        rewrite: (p: string) => p.replace(/^\/api/, ''),
        bypass(req, res,options){
          const proxyUrl = new URL(options.rewrite(req.url) || '', (options.target) as string)?.href || '';
          res.setHeader("x-req-proxyUrl",proxyUrl)
        }
      }
    }
  }

把这个配置加上之后,再重启项目就可以成功访问该接口了!

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值