vue-resource拦截接口,模拟数据

2019-03-14  本文已影响0人  AAA前端

目前用vue-cli3完成一个小项目,后端把接口定义好了,传递参数,返回参数等等,但是还没有开发完成,一般我们都是本地在代码里面返回一个json数据,没有使用接口。等到后端接口上线后,才把请求等数据放进去。

这次由于小项目所有使用的是vue-resource发送请求,利用里面的拦截器实现对请求url的判断,返回对应的数据(其中可以根据自己传递的参数,返回不同的结果。);

下面是我的项目结构

image.png

test文件夹是我用来放返回数据的文件夹,其中有一个test.js是我用来拦截接口返回的本地数。(但是如果接口多可以多个js,各自完成各自的接口数据,最后倒入到统一个js里面。我这里试验一个就行了。)

1.test.js

// 第一个接口返回
function jiekou1(obj){
  return {
    name: obj.name,
    age: 14
  }
}
// 第二个接口返回
function jiekou2(list){
  return list.map((v)=>{
    return v+"同学"
  })
}

// 第三个接口返回
function jiekou3(list){
  return list.map(v=>{
    if(v.age>18){
      return v
    }
  })
}

export default {
  jiekou1,
  jiekou2,
  jiekou3
}

*在这里我模拟了三个后端接口,当然有点简单,里面自己可以完成自己的逻辑,模拟后台返回数据。

2.main.js

import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'
import router from './router'
import store from './store'
import VueResource from 'vue-resource'
import resData from '../test/test'

Vue.config.productionTip = false

Vue.config.devtools = true

Vue.use(VueResource)
Vue.use(Vuex)



Vue.http.interceptors.push(function(request, next) {
    console.log('request', request)
    // 判断request.url 觉得返回的时候返回那个数据
    console.log('resData',resData)
    var fn = resData.jiekou1(request.params);

    // 可以用一个js来管理所有的路径对应的resData里面的方法
    /* if(request.url == 'jjjjskdjklfajsdkl'){
          fn = resData.params
    } */
    next(() => {      
        var obj = {
          body: fn,
          bodyText: JSON.stringify(fn),
          headers: '',
          ok: true,
          status: 200,
          statusText: "OK",
          url: request.url
        }
        return obj;
    })
})

router.beforeEach((to, from, next) => {
    if (to.meta.title) {
        document.title = to.meta.title;
    }
    next();
});

new Vue({
    router,
    store,
    render: h => h(App)
}).$mount('#app')

3 实际使用

methods: {
    test(){
      console.log('开始')
      // 后端接口 http://www.test.com  还没有开发好
      this.$http.get('http://www.test.com', { params: { name: '张三' } ).then(res=>{
        console.log('获取拦截结果',res)
      })
    }
}

贴图


image.png
上一篇 下一篇

猜你喜欢

热点阅读