uniapp使用axios无法请求怎么办

uniapp使用axios无法请求的解决办法:首先在根目录新建一个【axios.js】文件,在该文件中配置一个新的axios;然后使用这个适配器并设置重新发起请求的次数以及每次重新请求的间隔时间。

uniapp使用axios无法请求怎么办

本教程操作环境:windows7系统、uni-app2.5.1版本,该方法适用于所有品牌电脑。

推荐(免费):uni-app开发教程

uniapp使用axios无法请求的解决办法:

在根目录新建一个axios.js文件,在该文件中配置一个新的axios

import axios from "axios";const service = axios.create({  withCredentials: true,  crossDomain: true,  baseURL: '***',  timeout: 6000})

登录后复制

在根目录建一个lib文件夹,在这个文件夹里建一个adapter.js文件,该文件配置了基于uniapp的axios适配,记得抛出这个适配器

import settle from "axios/lib/core/settle"import buildURL from "axios/lib/helpers/buildURL"/* 格式化路径 */const URLFormat = function (baseURL, url) {  return url.startsWith("http") ? url : baseURL}/* axios适配器配置 */const adapter = function (config) {  return new Promise((resolve, reject) => {    uni.request({      method: config.method.toUpperCase(),      url: buildURL(URLFormat(config.baseURL, config.url), config.params, config.paramsSerializer),      header: config.headers,      data: config.data,      dataType: config.dataType,      responseType: config.responseType,      sslVerify: config.sslVerify,      complete: function complete(response) {        response = {          data: response.data,          status: response.statusCode,          errMsg: response.errMsg,          header: response.header,          config: config        };        settle(resolve, reject, response);      }    })  })}export default adapter;

登录后复制

在根目录的axios.js文件中,使用这个适配器并设置重新发起请求的次数以及每次重新请求的间隔时间

import adapter from "./lib/adapter"service.defaults.adapter = adapter;service.defaults.retry = 5; // 设置请求次数service.defaults.retryDelay = 1000;// 重新请求时间间隔

登录后复制

设置一个请求完成后的拦截器,如果响应头中的状态码为200表示成功,将请求得到的数据返回,否则一律视为错误请求,需要返回一个Promise。在lib中建立一个axiosError.js在里面处理失败的请求。

service.interceptors.response.use(res => {  if (res.status == 200) {    return res;  } else {    return Promise.reject(res);  }}, err => axiosError(err, service))

登录后复制

axiosError.js中需要传入axios拦截器截到的错误以及我们新创建的这个axios,这个错误处理页面只是充当一个分配器的角色,我们可以根据响应头中的状态进行处理该错误,未处理的错误在使用时处理,返回Promise.reject

// 处理401错误代码import Error401 from "../handlers/401Error";export default function (err, axios) {  const errStatus = err.response.status;  if (errStatus == 401) {    return Error401(err); // 401没有权限,重新请求设置token  } else {    return Promise.reject(err);  }}

登录后复制

处理401错误代码,当请求失败并且响应头中的状态码为401时,是我没没有权限去请求,可以根据项目来进行处理,我们是需要携带token,所以401为token未携带或失效,请求时无需传入token,axios遇到401会自动携带这个token重新去请求。在根目录建一个handlers文件夹,在里面建一个401Error.js用于处理401的错误。

这里使用到Vuex,需要引入Vuex,因为获取token、设置token的方法以及token都放在里面!!!使用store.dispatch(“getToken”)得到token后将token设置到请求头Authorization

import interceptorsError from "../lib/interceptorsError";import store from 'store/index'/* 需要传入axios错误配置 */export default function (err, axios) {  const config = err.config;// axios请求配置  store.dispatch("getToken").then(function () {    config.headers["Authorization"] = store.state.cnrToken.cnr_token;  });  err.config = config;  return interceptorsError(axios, config);}

登录后复制

一切准备就绪之后需要重新请求,在根目录建一个interceptorsError.js文件,用于重新执行请求,这个方法需要一个请求配置,只需要把我们上一个请求的配置传入即可。

export default function (axios, config) {  // 如果配置不存在或未设置重试选项,reject  if (!config || !config.retry) return Promise.reject(err);  // 设置变量以跟踪重试计数  config.__retryCount = config.__retryCount || 0;  // 如果重试次数大于最大重试次数,reject  if (config.__retryCount >= config.retry) {    return Promise.reject(err);  }  // 每重试一次记录一次重试次数  config.__retryCount += 1;  // 重试间隔时间  const backoff = new Promise(function (resolve) {    setTimeout(function () {      resolve();    }, config.retryDelay || 1000);  });  return backoff.then(function () {    return axios(config);  });}

登录后复制

这是我Vuex中的代码

/* * @Author: UpYou * @Date: 2020-09-25 16:30:13 * @LastEditTime: 2020-09-25 21:32:56 * @Descripttion: token *  */const state = {  cnr_token: '',  POST_KEYS: {    ...获取token需要的验证信息...  }};const mutations = {  /* 设置token */  SET_CNRTOKEN(state, Payload) {    if (Payload.startsWith("Bearer"))      state.cnr_token = Payload;    else state.cnr_token = "Bearer" + Payload;  }}const actions = {  /* 向服务器获取token */  getToken(context, args) {    return new Promise(function (resolve, reject) {      uni.request({        url: "token服务器地址",        data: { ...context.state.POST_KEYS },        method: "get",        async success(res) {          await context.commit('SET_CNRTOKEN', res.data.access_token)          await resolve(res.data)        },        fail: reject      });    })  }}export default {  state, mutations, actions,}

登录后复制

以上就是uniapp使用axios无法请求怎么办的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3031580.html

(0)
上一篇 2025年3月13日 08:36:52
下一篇 2025年3月10日 21:16:37

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • uniapp修改组件默认样式

    uniapp修改组件默认样式的方法:1、当前页面style中加上【/deep/】;2、【/deep/】后边加上在element中找到的class名字。 本教程操作环境:windows7系统、uni-app2.5.1版本,该方法适用于所有品牌…

    2025年3月13日
    200
  • uniapp怎么实现输入框监听值

    uniapp实现输入框监听值的方法:使用placeholder实现,代码为【, 本教程操作环境:windows7系统、uni-app2.5.1版本,该方法适用于所有品牌电脑。 推荐(免费):uni-app开发教程 uniapp实现输入框监听…

    2025年3月13日
    200
  • uniapp如何封装函数

    uniapp封装函数的方法:1、获取当前时间,代码为【hour = date.getHours() 本教程操作环境:windows7系统、uni-app2.5.1版本,该方法适用于所有品牌电脑。 推荐(免费):uni-app开发教程 uni…

    2025年3月13日
    200
  • uniapp中如何获取text的值

    uniapp中获取text值的方法:首先填写文本框,并在data中定义一个inputcontent;然后在methods中写事件,代码为【this.inputcontent = e.target.value】。 本教程操作环境:window…

    2025年3月13日
    200
  • uniapp如何设置动态样式

    uniapp设置动态样式的方法:1、用户点击按钮后动态切换按钮选中样式;2、给标签渲染多种颜色,代码为【.signstyle-0{color: #3ac9e3;border: 1px solid #3ac9e3;}】。 本教程操作环境:wi…

    2025年3月13日
    200
  • uniapp如何更改图标

    uniapp更改图标的方法:首先把图标文件里的“iconfont.ttf”放到static文件夹里;然后打开“iconfont.css”,并查看unicode编码;最后把对应图标的编码填写到“page.json”的配置项里text即可。 本…

    2025年3月13日 编程技术
    200
  • uni-app导航栏背景色如何设置

    设置uuni-app导航栏背景色的方法:首先找到【pages.json】文件,点击打开;然后在页面的每个定义部分加navigationBarBackgroundColor;最后运行以后背景色就添加上去了。 本教程操作环境:windows7系…

    2025年3月13日 编程技术
    200
  • uniapp怎么设置背景色

    uniapp设置背景色的方法:首先找到并打开根目录的App.vue文件;然后在style块中添加代码为“page{background-color: #f5f5f5;}”即可。 本教程操作环境:windows7系统、uni-app2.5.1…

    2025年3月13日
    200
  • Uniapp怎么获取当前页面路由

    Uniapp获取当前页面路由的方法:1、使用getcurrentpages先获取所有数组,并取最后一个数组,再去获取路由;2、直接获取当前页面路由,代码为【let curRoute  = this.$mp.page.route;】。 本教程…

    2025年3月13日
    200
  • uniapp如何点击按钮实现页面切换

    uniapp点击按钮实现页面切换的方法:使用去轮播页,代码为【methods:{gotoLunBo(){uni.navigateTo({url: ‘test?id=1&name=uniapp’}}】。 本教程…

    2025年3月13日
    200

发表回复

登录后才能评论