nuxt.js笔记(三)--- axios请求接口

第一步安装

yarn add @nuxtjs/axios

第二步配置

在nuxt.config.js里

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

第三步引入

据说是直接可以在项目里用,但是我确实是不知道怎么用,就翻了之前的项目,把引入elementui的文件改成了index.js(原plugins/element.js)

这里还需要改一下nuxt.config.js里的plugins

原为

plugins: [
    '@/plugins/element.js'
],

改为

plugins: [
    '@/plugins/index.js'
],

第四步注入

在改后的index.js(下文的inedex.js无特殊说明均为plugins/index.js)里注入(正式项目并未这么写,而是进行了封装,如果需要封装可以忽略第四步)

import axios from 'axios'
Vue.prototype.$axios = axios;

这样目前就可以通过this.$axios在项目里访问了

第五步代理

在nuxt.config.js里

axios: {
    proxy: true,
    credentials: true
},
proxy: {
    "/api/": {
      target: "http://api.***.com/",
      changeOrigin: true,
      pathRewrite: {
        "^/": "",
      },
    },
},

第六步封装

第一个文件-require.js:封装axios的请求

如果需要cookie不想自己封装,就安一下

yarn add js-cookie
import axios from 'axios'
import * as Cookies from 'js-cookie'
import { Message, Loading } from 'element-ui'
let loadingInstance;
axios.create({
  withCredentials: false, // 跨域请求是否允许携带cookie资源凭证
  time: 1000, // 请求超时时间
})

//  request请求拦截器
axios.interceptors.request.use(
    (config) => {
    if (!Cookies.get('token')) {
      //未登录
      location.href = index.html
    }
    loadingInstance = Loading.service({
        lock: true,
        text: '飞速加载中……',
    })
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// response响应拦截器
axios.interceptors.response.use(
  (response) => {
    setTimeout(() => {
      loadingInstance && loadingInstance.close()
    }, 300)
    return response
  },
  (error) => {
    setTimeout(() => {
      loadingInstance && loadingInstance.close()
    }, 300)
    const { response } = error
    if (response) {
      // 服务器有返回内容
      let errormsg = ''
      switch (response.status) {
        case 400:
          errormsg = '错误请求'
          break
        case 401:
          errormsg = '未登录,请重新登录'
          break
        case 403:
          errormsg = '决绝访问'
          break
        case 404:
          errormsg = '请求错误,未找到该资源'
          break
        case 405:
          errormsg = '请求方法未允许'
          break
        case 408:
          errormsg = '请求超时'
          break
        case 500:
          errormsg = '服务器出错'
          break
        case 501:
          errormsg = '网络未实现'
          break
        case 502:
          errormsg = '网络错误'
          break
        case 503:
          errormsg = '服务不可用'
          break
        case 504:
          errormsg = '网络超时'
          break
        case 505:
          errormsg = 'http版本不支持该请求'
          break
        default:
          errormsg = '连接错误'
      }
      Message({ type: 'warning', message: errormsg })
      return false
    } else if (!window.navigator.online) {
        // 服务器连结果都没有返回  有可能是断网或者服务器奔溃
        // 断网处理
        Message('网络中断')
        return false
    } else {
        // 服务器奔了
        Message('服务器奔了')
        return Promise.reject(error)
    }
  }
)

/*
 *get 方法,对应get请求
 *@param {String} url [请求的url地址]
 *@param {Object} params[请求携带的参数]]
 */
export function get(url, params) {
  return new Promise((resolve, reject) => {
    axios
      .get(url, {
        params,
      })
      .then((res) => {
        if (res && res.status === 200 && res.data) {
            //请求成功
            reject(res)          
        } else {
          Message({
            type: 'warning',
            message: res.statusText ? res.statusText : '发生未知错误',
          })
          reject(res)
        }
      })
      .catch((err) => {
        reject(err.data)
      })
  })
}

/*
 *post 方法,对应post请求
 *@param {String} url [请求的url地址]
 *@param {Object} params[请求携带的参数]]
 */
export function post(url, params) {
  return new Promise((resolve, reject) => {
    axios({
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
      },
      method: 'post',
      url,
      data: params,
    })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err.data)
      })
  })
}

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

/*
 *put 请求
 *@param url
 * @param params
 */
export function put(url, params) {
  return new Promise((resolve, reject) => {
    axios.put(url, params).then(
      (res) => {
        resolve(res.data)
      },
      (err) => {
        reject(err)
      }
    )
  })
}
第二个文件-api.js:接口list
import { get, post, post} from './request'
export default {
    data: params => get('/api/index', params)
}

注:第六步是引用的别的文章的代码基础上改的,但是找不到那篇文章了,如果作者在意的话可以跟我沟通下,会注明来源。文章内的代码有一部分涉及到业务代码做了一些处理,如果对执行有影响欢迎指正。

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

推荐阅读更多精彩内容

  • 前言 哈喽大家周一好,今天的内容比较多,主要就是包括:把前端页面的展示页给搭出来,然后调通接口API,可以添加数据...
    SAYLINING阅读 1,196评论 0 2
  • 前段时间刚好公司有项目使用了Nuxt.js来搭建,而刚好在公司内部做了个分享,稍微再整理一下发出来。本文比较适合初...
    fengxianqi阅读 20,195评论 3 22
  • Nuxt爬坑 第一节:nuxt.js相关概述 nuxt.js简单的说是Vue.js的通用框架,最常用的就是用来作S...
    阿_军阅读 994评论 0 0
  • 为什么使用nuxt.js? vue单页面应用渲染是从服务器获取所需js,在客户端将其解析生成html挂载于id为a...
    然后呢_阅读 89,626评论 5 84
  • 学完 NuxtJs 发现太好用了,完全不需要担心乱七八槽的配置,全部自己生成,很良心有没有♥。项目中一般 Reac...
    CondorHero阅读 2,049评论 0 2