Coder Social home page Coder Social logo

uni-ajax's People

Contributors

ponjs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

uni-ajax's Issues

请求响应拦截不起作用是怎么回事呢?

// 添加请求拦截器
request.interceptors.request.use(config => {
try {
uni.showNavigationBarLoading()
const token = uni.getStorageSync('token');
if (token) {
// 判断是否存在token,如果存在的话,则每个http header都加上token
config.headers.Authorization = token;
}
config.headers.type = "user"; // type:user 是固定的
console.log(config.headers)
return config;
} catch (e) {
uni.hideNavigationBarLoading()
uni.showToast({
title: '发生错误,请稍后重试',
position: 'center',
icon: 'none',
duration: 2000
})
}
},
err => {
uni.hideNavigationBarLoading()
return Promise.reject(err);
}
);

异步拦截器相关错误捕获

  • 在异步拦截器fulfilled里面抛出错误或者普通拦截器返回 Promise.reject(),相关错误会被移交到后一步的拦截器的rejected里面处理。目前仅发现问题所在,暂时没想到解决办法。

微信小程序响应没进回调,H5是正常的

request.js

import ajax from 'uni-ajax'
import httpConfig from '../config/http.js'

const instance = ajax.create({ baseURL: httpConfig.baseURL })
// 请求拦截
instance.interceptors.request.use(
  function (config) {
    config['header']['Authorization'] = uni.getStorageSync('token')
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)
// 响应拦截
instance.interceptors.response.use(
  function (response) {
    if (response.data && response.data.code === 401 && response.config.url !== '/logout') {
      console.log('会话超时,请重新登录')
    }
    return response.data
  },
  function (error) {
    return Promise.reject(error)
  }
)

class HTTP {
  // POST请求
  post(url, data) {
    let config = JSON.parse(JSON.stringify(httpConfig))
    return instance.post(url, JSON.stringify(data), config)
  }
}

export default HTTP

config/http.js

export default {
  // 默认请求方式
  method: 'POST',
  // 基础url前缀
  baseURL: 'xxx',
  // 请求头信息
  header: {
    'Content-Type': 'application/json;charset=UTF-8'
  },
  // POST参数
  data: { test: 123 },
  // GET参数
  params: {},
  // 超时时间
  timeout: 15000,
  // 携带凭证
  withCredentials: false,
  // 返回数据类型
  responseType: 'json'
}

`
api/common.js
`
import HTTP from '../http/request.js'

// 登录
function login(reqdata) {
  return new HTTP().post('/member/login', reqdata)
}

export default {
  login
}

页面

login() {
      this.logining = true
      api
        .login(this.form)
        .then(res => {
          console.log(res)
          if (res.code === 200) {
            uni.setStorageSync('token', res.data.Authorization)
            uni.setStorageSync('userinfo', res.data.member)
            this.$utils.toast.success('登录成功')
            this.$utils.router.switchTab('/pages/index/index')
          } else {
            this.$utils.toast.info(res.msg || '登录失败,请稍后重试')
          }
          this.logining = false
        })
        .catch(err => {
          console.log(err)
          this.logining = false
          this.$utils.toast.info('网络异常,请稍后重试')
        })
    }

问题描述:
微信小程序接口200了,但是在request.js里的响应拦截里也打印不出日志,在方法里也打印不出,没进任何一个回调,包括finally。不知道啥原因

patch 何在?加个 patch 吧

export interface AjaxInstance<T extends AjaxConfigType> extends AjaxInvoke {
  get: AjaxInvoke
  post: AjaxInvoke
  put: AjaxInvoke
  delete: AjaxInvoke
  connect: AjaxInvoke
  head: AjaxInvoke
  options: AjaxInvoke
  trace: AjaxInvoke
  getURL(config?: AjaxConfigType): Promise<string>
  readonly defaults: AjaxRequestConfig
  readonly config: T
  interceptors: {
    request: AjaxInterceptorManager<AjaxRequestConfig>
    response: AjaxInterceptorManager<AjaxResponse>
  }
}

uni-ajax TS类型匹配的问题

instance.interceptors.response.use(
  (response: AjaxResponse<HttpResponse>) => {
    const res = response.data;
    if (res.code !== 200) {
      uni.showToast({
        title: res.msg || "Error",
        icon: "none",
        duration: 5 * 1000,
      });
      if ([400, 401, 403].includes(res.code)) {
        uni.navigateTo({
          url: "/pages/login/index",
        });
      }
      return Promise.reject(new Error(res.msg || "Error"));
    }
    return res;
  },
  (error) => {
    uni.showToast({
      title: error.msg || "Request Error",
      icon: "none",
      duration: 5 * 1000,
    });
    return Promise.reject(error);
  }
);

image
如何解决这个类型问题

interface HttpResponse<T = unknown> {
  code: number;
  msg: string;
  data: T;
}

微信小程序开发工具 response 拦截器不响应,真机调试正常

如题。
"uni-ajax": "^2.5.1",

instance.interceptors.request.use(
            config => {
                config.header['Content-Type'] = 'application/json;charset=UTF-8'
                if (HttpBridge.onBeforeRequest) {
                    HttpBridge.onBeforeRequest(config)
                }
                return config
            },
            error => {
                // 提供外部处理
                if (HttpBridge.onRequestError) {
                    HttpBridge.onRequestError(error)
                }
                return Promise.reject(error)
            },
        )
 instance.interceptors.response.use(
            response => {
                // 提供外部处理
                if (HttpBridge.onAfterResponse) {
                    HttpBridge.onAfterResponse(response)
                }
                return response.data
            },
            error => {
                if (HttpBridge.onResponseError) {
                    HttpBridge.onResponseError(error)
                }
                return Promise.reject(error)
            }
        )

request能响应

vue3+vite cli创建的项目

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.