Nuxt中Axios的api封装

1、下载Nuxt封装的Axios依赖

npm install @nuxtjs/axios --save

2、在nuxt.config.js中的配置

export default {
  modules: [
    '@nuxtjs/axios',
  ],

  axios: {
    // proxy: true
  }
}

3、使用

  • 在asyncData中使用
async asyncData({ $axios }) {
  const ip = await $axios.$get('http://icanhazip.com')
  return { ip }
}
  • methods/created/mounted/etc 中使用
methods: {
  async fetchSomething() {
    const ip = await this.$axios.$get('http://icanhazip.com')
    this.ip = ip
  }
}




接下来就要封装api了

1、在plugins创建api.js


export default function ({ app, $axios, redirect }) {

  const API = {};

  API.getPublicKey = function (params) {
    return $axios({
      url: '/api/serviceConvergeRsa',
      method: 'get',
      data: params,
      headers: {
        'encrypt': 1
      },
    })
  };

  API.getServiceList = function (data, header={}) {
    return $axios({
      url: `/api/getServiceConvergeList`,
      method: 'get',
      params: data,
      headers: header
    })
  };

  app.api = API;
  inject('api',API);

}

2、在nuxt.config.js中的配置

export default {
  plugins: [
    '~/plugins/api'
  ],
  modules: [
    '@nuxtjs/axios',
  ],

  // 需要代理,可以打开底下的注释
  // axios: {
  //   proxy: true
  // },
  // proxy: {
  //   '/api/': 'https://www.jianshu.com'
  // },
}

3、使用

  • 在asyncData中使用
async asyncData(context) {
    // 请检查您是否在服务器端
   // if (process.server) {}
   const RSA_DATA = await context.app.api.getPublicKey({});
   return RSA_DATA 
}
  • 在methods中使用
methods: {
    // 获取我的服务列表
    async getDatas() {
      const params = { "activityType": 0 }
      const headers = { }
      const data = await this.$api.getServiceList (params, headers);
      if (data.code == 200) {
        this.serviceLis = data.data || []
      } else {
        console.log(获取列表失败)
      }
    }
}




接口缓存

1、下载lru-cache依赖

npm install lru-cache --save

2、在plugins创建globalCache.js

用于缓存数据

const LRU = require('lru-cache')
const cachePage = new LRU({
    // 最大缓存数量
    max: 10,
    // 缓存过期时间(ms),缓存1小时
    maxAge: 60 * 60 * 1000
})
 
module.exports = cachePage

3、修改api.js


const globalCache = require('./globalCache');

export default function ({ query, app, $axios, redirect }, inject) {

  const API = {};
  API.getPublicKey = function (params) {
    // 页面请求附带refresh参数时,强制刷新数据
    if (globalCache.get('serviceConvergeRsa') && globalCache.get('RSA_PUBLIC_KEY') && !query.refresh) {
      
      return Promise.resolve(globalCache.get('serviceConvergeRsa'));
    }
    
    return $axios({
      url: '/api/serviceConvergeRsa',
      method: 'get',
      data: params,
      headers: {
        'encrypt': 1
      },
    }).then(function (res) {
      var RSA_DATA = res.data
      if (RSA_DATA.code === 200) {
        console.log('刷新serviceConvergeRsa密钥数据~');
        // 设置缓存数据
        globalCache.set('RSA_PUBLIC_KEY', RSA_DATA.data.rsaPublicKey, Number(RSA_DATA.data.expireTime));
        globalCache.set('serviceConvergeRsa', RSA_DATA, Number(RSA_DATA.data.expireTime));
      }else{
        console.error('serviceConvergeRsa',RSA_DATA.message)
      }
      
      return Promise.resolve(res.data);
    })
  };

  API.getServiceList = function (data, header={}) {
    var globalCacheKey = 'getServiceConvergeList'
    // 如果接口缓存有数据,且页面请求没有refresh参数,则返回缓存数据
    if (globalCache.get(globalCacheKey) && !query.refresh) {
      return Promise.resolve(globalCache.get(globalCacheKey));
    }
    
    return $axios({
      url: `/api/getServiceConvergeList`,
      method: 'get',
      params: data,
      headers: header
    }).then(function (res) {
      var result = res.data;
      if (result.code == 200 && result.data) {
        console.log('刷新getServiceConvergeList服务汇聚列表数据~');
        // 设置缓存数据
        globalCache.set(globalCacheKey, res.data);
      }else{
        console.error('getServiceConvergeList',result.message)
      }
      return Promise.resolve(res.data);
    })
  };
  
  app.api = API;
}

其他配置以及使用 参考前面的api封装。

如有不足,请多多指教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容