当前位置: 首页 > 面试题库 >

使用vue开发过程你是怎么做接口管理的?

韩弘方
2023-03-14
本文向大家介绍使用vue开发过程你是怎么做接口管理的?相关面试题,主要包含被问及使用vue开发过程你是怎么做接口管理的?时的应答技巧和注意事项,需要的朋友参考一下

创建一个request.js用于封装axios,在 src/api/request,设置拦截器统一处理请求和相应。

封装 axios:request.js

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

function Index({...config}) {
  // create an axios instance
  const service = axios.create({
    /*headers: {
      'Cache-Control': 'no-cache'
    },*/
    baseURL: config.baseURL || process.env.VUE_APP_BASE_API, // url = base url + request url
    // withCredentials: true, // send cookies when cross-domain requests
    timeout: 30000 // request timeout
  })

  // request interceptor
  service.interceptors.request.use(
    config => {
      return config
    },
    error => {
      return Promise.reject(error)
    }
  )

  // response interceptor
  service.interceptors.response.use(
    response => {
      return response
    },
    error => {
      const {request = {}} = error;
      const {status, response} = request;

      error.status = status
      try {
        error.res = JSON.parse(response)
      } catch (e) {
        console.warn(e)
      }
      return Promise.reject(error)
    }
  )

  /**
   * 发起请求
   * @param method 请求方法
   * @param url 请求地址
   * @param params 要发送的数据
   * @param config 配置
   * @param axiosConfig Axios配置项
   * @returns {Promise<never>|Promise<AxiosResponse<T>>}
   */
  const requestProcessor = (method, url, params, config, axiosConfig) => {
    const headers = {}
    const token = getToken().token
    if (token) {
      // let each request carry token
      headers['Authorization'] = 'JWT ' + token
    }

    if (config.formData) {
      const fd = new FormData();
      for (let key in params) {
        fd.append(key, params[key])
      }
      params = fd
    }

    switch (method.toUpperCase()) {
      case 'GET':
        return service.get(url, {
          params,
          headers,
          ...axiosConfig,
        })
      case 'POST':
        return service.post(url, params, {
          headers,
          ...axiosConfig,
        })
      case 'DELETE':
        return service.delete(url, {
          params,
          headers,
          ...axiosConfig,
        })
      case 'PUT':
        return service.put(url, params, {
          headers,
          ...axiosConfig,
        })
      default:
        return Promise.reject(new Error(`${method} 方法无效,请用正确的请求方法`))
    }
  }

  this.service = async ({method, url, params, config = {}, axiosConfig = {}}) => {
    const {isLoading = true, isToast = true} = config

    let loadingInstance
    isLoading && (loadingInstance = Loading.service({
      fullscreen: true,
      background: 'transparent',
      text: '加载中...'
    }))

    try {
      const response = await requestProcessor(method, url, params, config, axiosConfig)
      // 此处可以再次拦截
      return response.data
    } catch (error) {
      isToast && Message.error(error.message)
      throw error
    } finally {
      isLoading && loadingInstance.close()
    }

  }
}

export const {request} = new Index()
export default Index

接口 listing.js

import Request from "@/api/request"

const {service} = new Request()

export default {
  userPostList({pageSize, page}) {
    return service({
      method: 'get',
      url: '/userpostlist/',
      params: {
        pageSize,
        page
      },
      config: {
        isLoading: false
      }
    })
  }
}

在 Vue 组件中使用:

import listing from "@/api/listing"

export default {
    mounted() {
      this.getList()
    },
    methods: {
      getList() {
        this.isLoading = true

        listing.userPostList({
          pageSize: this.pageSize,
          page: this.currentPage,
        }).then(data => {
          this.currentPage = parseInt(data.currentPage)
          this.total = data.total
          this.list = data.results

        }).finally(() => {
          this.isLoading = false
        })
      }
    }
}
 类似资料:
  • 本文向大家介绍你有使用过vue开发多语言项目吗?说说你的做法?相关面试题,主要包含被问及你有使用过vue开发多语言项目吗?说说你的做法?时的应答技巧和注意事项,需要的朋友参考一下 我个人网站的多语言是用vuex实现的,所有语言对于信息都命名,存在后端,由restful接口返回,在切换语言时触发dispatch,调用接口,在所有页面里mapState拿到语言配置,渲染上去 i18n没耍过

  • 本文向大家介绍你是怎么做用户调研的?相关面试题,主要包含被问及你是怎么做用户调研的?时的应答技巧和注意事项,需要的朋友参考一下 考察用户调研和访谈的能力,可以从以下几个维度分析: 明确调研目的,选择调研方式:用户访谈(电话、线下、圆桌访谈、微信)、问卷调研; 确定调研的对象,怎么找到你需要调研的对象,即调研的目的是什么,根据目的是寻找调研对象; 准备好调研问题和提纲; 调研结果收集和分析,形成调研

  • 你是怎么理解Vue响应式原理的?,这是一道前端面试非常高频的Vue面试题,但是很多同学在面试时候只能说出个大概,老规矩,点赞收藏支持一下,给我一分钟,理想哥教大家该怎么满分回答这个问题 如果我是求职者,我会这么回答: 在vue2中,Vue的响应式原理是使用Object.defineProperty来实现的,使用defineProperty挨个对data中的属性实现监听,当数据变化后再去触发视图的更

  • 本文向大家介绍怎么使用pipenv管理你的python项目,包括了怎么使用pipenv管理你的python项目的使用技巧和注意事项,需要的朋友参考一下 在thoughtbot,我们用Ruby和Rails工作,但通常我们总是尝试使用最合适的语言或者框架来解决问题。我最近一直在探索机器学习技术,所以Python使用地更多。 Ruby项目和Python项目处理之间的一个很大的区别就是管理依赖关系方式的不

  • 本文向大家介绍不用vue-cli,你自己有搭建过vue的开发环境吗?流程是什么?相关面试题,主要包含被问及不用vue-cli,你自己有搭建过vue的开发环境吗?流程是什么?时的应答技巧和注意事项,需要的朋友参考一下 https://juejin.im/entry/5d42905c5188250c3f5d6d26 答案,之前自己写的

  • 本文向大家介绍SSR解决了什么问题?有做过SSR吗?你是怎么做的?相关面试题,主要包含被问及SSR解决了什么问题?有做过SSR吗?你是怎么做的?时的应答技巧和注意事项,需要的朋友参考一下 "你是怎么做的?" 废话,能怎么做,看着文档指引去做,搭 webpack,nodejs