网络请求封装(两种方法)

import axios from 'axios'
import { Message } from 'element-ui'
import router from '../../router'

const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 90000
})
// 请求方法处理
service.interceptors.request.use(
  config => {
    if (localStorage.getItem('token')) {
      config.headers['Authorization'] = localStorage.getItem('token')
    }
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)

// 返回响应处理
service.interceptors.response.use(
  response => {
    const res = response.data
    if (res.code !== 0) {
        // 后台返回的报错
      if(res.message && res.message.indexOf('用户名或密码')>-1){
        router.replace('/')
      }else{
        Message({
          message: res.message,
          type: 'error',
          duration: 5 * 1000
        })
      }
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      return res
    }
  },
  error => {
    console.log('error' + error) // for debug
    return Promise.reject(error)
  }
)

export default service

使用:

import request from '@/utils/ai/request'
// 删除算法
export function deleteAlgorithm(params) {
    return request({
        url: 'algorithm/delete',
        method: 'get',
        params
    })
}

way2:

import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import { Loading } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'

// 请求实例
const instance = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 60000
})

// 请求前置过滤器
instance.interceptors.request.use(
  config => {
    if (store.getters.token) { // 如果存在token话,会自动携带token  这里就不要做什么处理了
      config.headers['token'] = getToken()
    }
    // 这里存在一些问题,如果出错了再修改,能跑就行
    if (getToken()) {
      config.headers['token'] = getToken()
    }
    return config
  },
  error => {
    console.log(error)
    return Promise.reject(error)
  }
)

// 响应数据拦截并做通用处理
instance.interceptors.response.use(
  response => {
    const res = response.data

    // 下载文件直接返回
    if (res.type === 'application/octet-stream') {
      return response
    }

    if (res.type === 'application/vnd.ms-excel') {
      return response
    }

    // 0为正确响应码
    if (res.code !== 0) {
      Message({
        message: res.msg || 'Error',
        type: 'error',
        duration: 5 * 1000
      })

      // 登录超时响应码
      if (res.code === 10010002) {
        // to re-login
        MessageBox.confirm('登录超时,请重新登录!', '登录提示', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          store.dispatch('user/resetToken').then(() => {
            location.reload()
          })
        })
      }
      return Promise.reject(new Error(res.msg || 'Error'))
    } else {
      return res
    }
  },
  error => {
    console.log('err' + error)
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

/**
 * 上传
 * @param url
 * @param data
 */
export function upload(url, file, data) {
  const formData = new FormData()
  formData.append('file', file)

  // 附加数据
  if (data) {
    Object.keys(data).forEach((key) => {
      formData.append(key, data[key])
    })
  }

  return new Promise((resolve, reject) => {
    // 打开
    const loading = Loading.service({
      text: '正在上传数据...',
      background: 'rgba(0, 0, 0, 0.7)'
    })

    instance.request({
      url: url,
      method: 'post',
      data: formData,
      timeout: 1200000
    }).then(response => {
      console.log(response)
      loading.close()
      resolve(response)
    }).catch(err => {
      loading.close()
      reject(err)
    })
  })
}

/**
 * 下载
 * @param url
 * @param data
 */
export function download(url, data, fileName) {
  return new Promise((resolve, reject) => {
    // 打开
    const loading = Loading.service({
      text: '正在下载数据...',
      background: 'rgba(0, 0, 0, 0.7)'
    })

    instance.request({
      url: url,
      method: 'post',
      data: data,
      timeout: 1200000,
      responseType: 'blob'
    }).then(res => {
      loading.close()

      // 文件下载
      const blob = new Blob([res.data], {
        type: 'application/vnd.ms-excel'
      })

      // 获得文件名称
      let link = document.createElement('a')
      link.href = URL.createObjectURL(blob)
      link.setAttribute('download', fileName)
      link.click()
      link = null
      Message.success('下载导出成功!')
    }).catch(err => {
      loading.close()
      reject(err)
    })
  })
}

/**
 * 封装post请求
 * @param url
 * @param data
 * @returns {Promise}
 */
export function post(url, data = {}) {
  return new Promise((resolve, reject) => {
    instance.post(url, data)
      .then(response => {
        resolve(response)
      }, err => {
        reject(err)
      })
  })
}

使用:

import { post } from '@/utils/request'

/**
 * 考试详情
 * @param data
 */
export function fetchDetail(id) {
  return post('/exam/api/exam/exam/detail', { id: id })
}

/**
 * 查询试卷的试题
 * @param data
 */
export function findDatail(data) {
  return post('/exam/api/user/wrong-book/paging', data)
}
/**
 * 保存题库
 * @param data
 */
export function saveData(data) {
  return post('/exam/api/exam/exam/save', data)
}

/**
 * 题库详情
 * @param data
 */
export function fetchList() {
  return post('/exam/api/exam/exam/paging', { current: 1, size: 100 })
}
// 获取试题详情
export function getDetail(data) {
  return post('/exam/api/repo/detail', data)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会为您详细解析微信小程序封装网络请求代码。 微信小程序中的网络请求两种方式:一种是使用内置的wx.request()函数,另一种是使用第三方库进行封装。下面我们来介绍一下如何封装网络请求代码。 1. 创建一个request.js文件 首先,我们需要在项目目录下创建一个request.js文件。该文件用于封装网络请求代码。 2. 封装网络请求代码 在request.js文件中,我们可以使用Promise对象来封装网络请求代码。下面是一个基本的封装代码: ``` function request(url, method, data) { return new Promise((resolve, reject) => { wx.request({ url: url, method: method, data: data, success: function (res) { resolve(res.data); }, fail: function (error) { reject(error); } }) }) } module.exports = { request: request } ``` 上面的代码中,我们定义了一个request函数,它接受三个参数:url、method和data。其中,url表示请求的地址,method表示请求方法(GET或POST),data表示请求的参数。 该函数返回一个Promise对象,当请求成功时,调用resolve方法并传递返回的数据;当请求失败时,调用reject方法并传递错误信息。 3. 在页面中使用封装代码 在页面中使用封装网络请求代码非常简单。我们只需要在页面的js文件中引入request.js文件,并调用request函数即可。下面是一个示例代码: ``` const request = require('../../utils/request.js'); Page({ data: { list: [] }, onLoad: function () { this.getList(); }, getList: function () { let url = 'https://xxx.xxx.xxx'; // 请求地址 let method = 'GET'; // 请求方法 let data = {}; // 请求参数 request.request(url, method, data) .then(res => { this.setData({ list: res }) }) .catch(error => { console.log(error); }) } }) ``` 上面的代码中,我们在onLoad函数中调用getList函数,该函数使用request函数发起网络请求。当请求成功时,将返回的数据存储到list中;当请求失败时,打印错误信息。 以上就是微信小程序封装网络请求代码的详细解析。希望对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值