axios请求体(axios调用)

http://www.itjxue.com  2023-01-28 16:17  来源:未知  点击次数: 

axios 请求数据,返回数据 data为空怎么办

传递数据格式的问题,axios 默认 application/json 而如果后端 需要application/x-www-form-urlencoded 可以通过 qs 或者 URLSearchParams 处理数据格式

axios请求封装,请求异常统一处理

前端采用了 axios 来处理网络请求,为了避免在每次请求时都去判断各种各样的网络情况,比如连接超时、服务器内部错误、权限不足等等不一而足,我对 axios 进行了简单的封装,这里主要使用了 axios 中的拦截器功能。

封装后的网络请求工具 js 如下:

封装之后的错误信息这个大家一目了然,没啥好说的,唯一要说的是当出错的时候我执行的是: Promise.resolve(err); ,而不是 Promise.reject(err);

这是什么原因呢?

因为封装 axios 一个重要的目的就是希望能够对错误进行统一处理,不用在每一次发起网络请求的时候都去处理各种异常情况,将所有的异常情况都在工具 js 中进行统一的处理。但是这种方式也带来一个问题,就是我在发起网络请求的时候,一般都会开启一个进度条,当网络请求结束时,不论请求成功还是失败,我都要将这个进度条关闭掉,而失败的处理我都统一写在工具 js 里边了,因此就没在请求失败时关闭进度条了,解决这个问题,有两种方案:

直接在 request 的拦截器中开启一个 fullscreen 的 loading,然后在 response 的拦截器中将其关闭,即我将进度条也封装到工具 js 中了,但是非常不推荐这种方式,因为这种方式的用户体验非常之差,有兴趣的小伙伴可以自己试一下就知道了。

第二种解决方案就是大家看到的,我返回一个 Promise.resolve(err),则这个请求不会就此结束,错误的 message 我已经弹出来了,但是这条消息还是会继续传到 then 中,也就是说,无论请求成功还是失败,我在成功的回调中都能收到通知,这样我就可以将 loading 关闭了,比如下面这个登录请求:

axios发出数据没有请求体

axios发出数据没有请求体。根据查询相关公开信息显示:使用axios发送post请求,传入了Object格式的参数,在node后端req.body接收到的参数为空。axios在发送请求时,如果参数对象data不是表单数据格式对象,就会默认把数据转为json字符串,放到请求体中的。之前发过去的obj对象,被axios自动转化为了json字符串。重新回到服务器的配置代码上来,应该是服务器无法解析request请求的请求体body中JSON字符串的数据。

(责任编辑:IT教学网)

更多

推荐PHP+MySQL视频文章