vue+axios+eggjs post请求参数问题之万恶的ctrl+c/v大法

案情

最近呢想用vue+axios+eggjs作一个小东西练练手,碰到一个axios post请求参数没办法被后端获取的问题, 查阅了一下网上的资料呢,解决方法有许多种,固然我得挑选一个最接近本身问题状况的解决办法啦;
大都是如下相似的方法:
一、vue

二、 ios

好吧!既然找到方法了,也是蛮简单的操做嘛,搞!
如下是个人配置:json

ok,调试一下

呵呵~500!难受啊!
如图所示,报文中请求参数都没有,什么鬼啊,看了后台的日志发现确实也没有接收到发送的三个参数

因而又看了几遍本身的配置文件等等,妹毛病啊~,又去网上一通搜,无果;我又用了postman进行数据请求,发现是没有问题的,一样的参数。postman能够请求成功,后端能够拿到参数

下面是后台日志打印:
这个问题就很刁钻了啊,因而我把目光放到了请求时参数处理的这个问题上,在以前查询包括阅览axios文档的时候有看到过transformRequest这个方法,主要是对入参作一些转换处理的;
官方文档解释以下:

是的,妹毛病,我在本身的封装中也用了这个方法,有打印过入参data,发现是结果是我传入的参数,可是为何通过qs.stringify方法的处理以后就不行了呢,我对data进行了打印而且打印了它的类型,发现是一个string类型,因而我将其转换为object对象格式

通过上述代码处理。惊奇吧般的发现接口通了,后台可以获取到参数了

叼的一~~~~~~~,原来是入参类型变成了string,可是为何呢,我明明传的是对象进来的啊

呵呵,对不起,对不起,对不起,浪费你们时间了,我~~尼。。。为毛有个JSON.stringify(param)!!!!???

破案

原来这个方法我是从原先一个项目中拷贝过来的,没有在乎这里的细节,当时只想着能发出请求就成了,问题确定在我如今写的代码上面,这一折腾,脑袋疼!
最终的实现方案就是axios

import axios from 'axios'
import Qs from 'qs'

const service = axios.create({
  baseURL: 'http://127.0.0.1:7001',
  timeout: 1000,
  withCredentials: true,
  transformRequest: [function (data) {
    return Qs.stringify(data)
  }],
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' // 默认是application/json形式的,须要设置成如今这样
  }
})
复制代码

结语

上述只是简单的记录了一下本身傻逼的行为致使自残的结果,其实中间仍是有不少东西值得研究的,这儿也很少作记录了,之后有机会再详细总结,还有要说的就是平时在coding的过程当中不免会碰到类似功能代码,咱们可能会直接去拷贝使用,提升效率,在实现相应功能以后,可能不会去认真去看看这段代码的每个属性、方法是不是当前功能真正须要的,可是若是不在第一时间处理掉这些冗余的代码,可能会引起更严重的问题,比方说其余同事也复制了相关的代码,就像病毒同样传遍许多地方,而后相关这一块的代码后期就没办法维护了,因此不能由于一时的求快,为了完成而完成,实在不可取,与君共勉后端

相关文章
相关标签/搜索