axios与request的区别

axios与request的区别

发送数据类型的区别

  1. axios 会根据要发送的数据来设置合理的Content-type,默认是application/json

// data 是作为请求主体被发送的数据
// 只适用于这些请求方法 ‘PUT’, ‘POST’, 和 ‘PATCH’
// 在没有设置 transformRequest 时,必须是以下类型之一:
// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
// - 浏览器专属:FormData, File, Blob
// - Node 专属: Stream
axios.post(url, data, config)

  1. 当data是string的时候,1axios会尝试先将其作为JSON对象解析,如果能够解析成plain object,就会按照键值对设置Form data。2如果不能解析成对象,那么将会按照URLSearchParams的形式解析,类似于下面

sign=shal&id=12
=>
Form data
sign: sha1
id: 12

  1. 如果上述都失败,那么只会认为是一个空的key

axios.post(url, ‘sign’, config)
=>
Form data
sign

当传入string/URLSearchParams的时候,会设置成application/x-www-form-urlencoded
当传入plain object的时候,会设置成application/json
当传入FormData/File的时候,将会设置成multipart/form-data
当传入ArrayBuffer/ArrayBufferView/blob的时候,应该显式地设置为application/octet-stream
request库则只能传入 a Buffer, String or ReadStream,并且要显示地在headers中设置Content-type

响应的数据类型区别

  1. axios如何处理响应的数据取决于request中的responseType值。
 axios.post(
  url,
  data,
  {
    responseType: 'arrayBuffer' // 默认是json
  }
)   

如上,请求返回的数据将会被视为arrayBuffer处理。
responseType可取的值是 ‘arraybuffer’, ‘blob’, ‘document’, ‘json’, ‘text’, ‘stream’。
当我们设置responseType为text的时候,却依然axios还是会对其做一次json的处理,这是一个已知的bug。具体的解决方案,可以通过指定transformResponse 来跳过axios的默认转换。

axios.post(
  url,
  data,
  {
    transformResponse: data => data,
    responseType: 'text' // 默认是json
  }
)
  1. 而requese库返回的数据只有两种类型,String或者是Buffer。当指定encoding为null的时候,返回的body是Buffer类型,其他任何情况,(包括undefined)都是以utf8的编码转为字符串。
request({
  uri: '',
  methods: '',
  headers: {},
  body: ''
}, (err, response, body) => {
  typeof body == 'string' // true
})

如何判断响应失败的区别

  1. axios默认是只要http response code不在2xx的范围内,一律reject。你也可以指定失败的状态码范围。
axios.get('/user/12345', {
  validateStatus: function (status) {
    return status < 500; // Reject only if the status code is greater than or equal to 500
  }
})
  1. 而request库处理错误的情况和http.clientRequest一致。只有当建立连接,发起请求的过程中失败才会reject,凡是服务器响应,包括4xx,5xx都算是成功。
request({
  uri: 'not exist url'
}, (err, responst, body) => {
  err == null // true
})
  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值