学员端小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.8 KiB

1 year ago
  1. // 此vm参数为页面的实例,可以通过它引用vuex中的变量
  2. module.exports = (vm) => {
  3. // 初始化请求配置
  4. uni.$u.http.setConfig((config) => {
  5. /* config 为默认全局配置*/
  6. config.baseURL = 'http://121.41.97.244:8090'; /* 根域名 */
  7. config.header['content-type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
  8. return config
  9. })
  10. // 请求拦截
  11. uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
  12. // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
  13. config.data = config.data || {}
  14. // 根据custom参数中配置的是否需要token,添加对应的请求头
  15. if(config?.custom?.auth) {
  16. // 可以在此通过vm引用vuex中的变量,具体值在vm.$store.state中
  17. config.header.token = vm.$store.state.userInfo.token
  18. }
  19. return config
  20. }, config => { // 可使用async await 做异步操作
  21. return Promise.reject(config)
  22. })
  23. // 响应拦截
  24. uni.$u.http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
  25. const data = response.data
  26. console.log('response')
  27. console.log(data)
  28. // 自定义参数
  29. const custom = response.config?.custom
  30. if (data.code !== 0) {
  31. // 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示
  32. if (custom.toast !== false) {
  33. uni.$u.toast(data.message)
  34. }
  35. // 如果需要catch返回,则进行reject
  36. if (custom?.catch) {
  37. return Promise.reject(data)
  38. } else {
  39. // 否则返回一个pending中的promise,请求不会进入catch中
  40. return new Promise(() => { })
  41. }
  42. }
  43. return data === undefined ? {} : data
  44. }, (response) => {
  45. // 对响应错误做点什么 (statusCode !== 200)
  46. return Promise.reject(response)
  47. })
  48. }