nuxt的axios

930 阅读1分钟

image.png

安装 "@nuxtjs/axios": "^5.13.6", "axios": "^0.24.0",

1.创建一个plugins文件,封装一下axios.js包

axios.js

export default ({ app: { $axios } }, inject) => {
    $axios.setHeader('Content-Type', 'application/x-www-form-urlencoded')
    $axios.setHeader('appkey', 'xuelejia_api_appkey_temp_test')
    $axios.defaults.timeout = 10000;
    $axios.defaults.baseURL = 'http://www.baidu.com/api';
      // 当需要跨域的时候使用下面这个
  inject('axiosApi', (url, params, method) => {
    return new Promise((resolve, reject) => {
      $axios({
        method: method || "POST",
        url: '/main' + url,
        data: qs.stringify(params)
      }).then(res => {
        resolve(res)
      }).catch(err => {
        reject(err)
      });
    })
  })
  inject('request', (url, params, method) => {
    return new Promise((resolve, reject) => {
      $axios({
        method: method || "POST",
        url: '/api' + url,
        data: qs.stringify(params)
      }).then(res => {
        resolve(res)
      }).catch(err => {
        reject(err)
      });
    })
  })
}

2.nuxt.config.js文件,引入axios

  plugins: [
    '@/plugins/element-ui',
    '@/plugins/axios'
  ],

  modules: [
    '@nuxtjs/axios',
  ],
  
  //要跨域加上下面这个
    axios: {
        proxy: true
  },

  proxy: {
    "/api": {
      target: 'http://www.guge.com',
      ws: true,
      changOrigin: true,
      pathRewrite: {
        "^/api": ""
      }
    },
    "/main": {
      target: 'http://api.baidu.com',
      ws: true,
      changOrigin: true,
      pathRewrite: {
        "^/main": ""
      }
    },
  },
  

3.在页面使用

getRecom() {
  this.$axiosApi(
    "/netcourse/index",
    {
      cid: "",
    },
    "POST"
  ).then((res) => {
   
  });
},

这种不能在子组件中使用,并且获取不到this,但推荐

  async asyncData(app) {
    let res = await app.$axios.get('/dictDetail/getDictDetailByName',{
        params:{
       
      }
    })
    return { questList: res.data }
  },
  

能在子组件中使用

    async mounted() {
        let res = await this.$axios.get('/dictDetail/getDictDetailByName')
    }