zoukankan      html  css  js  c++  java
  • vue3.0+axios 跨域+封装

    封装: 

     目录结构:src/utils/request.js, 没有就自己建一个

    import axios from 'axios'
    import { Message } from 'element-ui'
    
    // create an axios instance
    const service = axios.create({
      baseURL: '/gateway', //添加于请求路径前
      timeout: 5000 // request timeout
    })
    
    service.interceptors.request.use( //请求拦截
      config => {
        const token = window.localStorage.getItem('token')
        if (token) {
          config.headers['autel-token'] = token  //在请求之前,像 headers 里面携带token
        }
        // Do something before request is sent
        if (
          config.applicationType !== 'JSON' &&
          config.url.indexOf('community-attachment') === -1
        ) {  //对 post 请求 或 put 请求的数据做 JSON 转换
          if (config.method === 'post' || config.method === 'put') {
            let _data = ''
            for (const it in config.data) {
              const value = config.data[it] === null ? '' : config.data[it]
              _data +=
                encodeURIComponent(it) + '=' + encodeURIComponent(value) + '&'
            }
            config.data = _data
          }
        }
        return config
      },
      error => {
        // Do something with request error
        return Promise.reject(error)
      }
    )
    
    service.interceptors.response.use( //对请求回来的数据做统一错误处理
      response => {
        const res = response
        if (res.data.code !== 1) {
          Message({
            message: res.data.message || '不明错误',
            type: 'error',
            duration: 5 * 1000
          })
        }
        // if the custom code is not 20000, it is judged as an error.
        if (res.status !== 200) {
          Message({
            message: res.message || '不明错误',
            type: 'error',
            duration: 5 * 1000
          })
          return Promise.reject(new Error(res.message || 'Error'))
        } else {
          return res
        }
      },
      error => {
        console.log('err' + error) // for debug
        Message({
          message: error.message,
          type: 'error',
          duration: 5 * 1000
        })
        return Promise.reject(error)
      }
    )
    
    export default service
    

      

      

    跨域, 在 vue.config.js 里配置

    const path = require('path')
    
    const resolve = dir => {
      return path.join(__dirname, dir)
    }
    
    module.exports = {
      devServer: {
        host: '0.0.0.0',
        port: 8080,
        proxy: {
          '/api': {
            target: 'http://autel-cloud-xxxx-dev.com',
            changeOrigin: true
          }
        }
      },
      chainWebpack: config => {
        config.resolve.alias
          .set('@', resolve('src'))
          .set('@API', resolve('src/api'))
          .set('@C', resolve('src/components'))
          .set('@U', resolve('src/utils'))
          .set('@V', resolve('src/views'))
          .set('@ATS', resolve('src/assets'))
      }
    }
    

      

      

     使用

        src/api/menu.js

    import request from '@/utils/request'
    
    //添加菜单
    export function addOrCompileMenu(data) {
      return request({
        url: '/api/admin/menu/saveMenu',
        method: 'post',
        applicationType: 'JSON',  //这一段表示,是post 请求,就将 请求参数转换成 JSON 格式
        data
      })
    }
    

      src/views/menu.vue

    import { getMenuList } from '@/api/menu'
    methods: {
       getMenuList({}).then(res => {
            if (res.status === 200) {
              this.list = res.data.data.menuVoList
            }
          })
    }
    

      

     

  • 相关阅读:
    用VisualC#.NET编写服务器日期控件
    全局程序集缓存GAC是什么概念
    HttpRequest.Filter 属性
    创建ASP.Net自定义控件
    js/javascript 判断变量未定义
    DevExpress 汉化(简单、实用、快速)
    一个页面标题和过滤输出的解决方案
    用VisualC#.NET编写服务器日期控件(源碼)
    ASP.NET多语言支持组件简介
    ASP.NET服务器控件编程浅析
  • 原文地址:https://www.cnblogs.com/SuperBrother/p/12618711.html
Copyright © 2011-2022 走看看