vueCli3 封装axios 及 配置proxy跨域

步骤1:首先呢,在util文件下创建一个auth.js 用来获取token 、存储token 、删除token (这里的token是存放在sessionStorage里面)

const TokenKey = ‘user_token‘

export function getToken() {

    return sessionStorage.getItem(TokenKey)
}

export function setToken(token) {
    return sessionStorage.setItem(TokenKey, token)

}

export function removeToken() {
    return sessionStorage.remove(TokenKey)
}

步骤2:将axios进行一个简单的封装;在util文件夹下创建一个http.js

process.env.VUE_APP_URL 是作为baseURL的, 不知道怎么回事儿的可以看看 https://www.cnblogs.com/TreeCTJ/p/12515914.html
import axios from "axios"  //引入axios
import qs from "qs"  //这个是axios里面的模块,用于序列化参数的。 看情况使用哦
import { getToken } from "./auth"   //获取到token

//创建一个axios实例
const service = axios.create({
   baseURL: process.env.VUE_APP_URL,
   timeout:5000,
   //transformRequest 这里主要是 post请求时 请求成功了,但是后台并没
   //有获取到前端的请求参数。如果后台是直接从请求体里取的话,请忽略
   transformRequest:[
       data => {
           let params = qs.stringify(data, {indices: false})
           return params
       }
   ]
})

let token = getToken()  //获取token

// 请求拦截器
service.interceptors.request.use(
    config => {
        if(token){
            //每次请求都需要带上token去请求接口
            config.headers[‘token‘] = getToken()
        }
        return config
    },
    error => {
       return Promise.reject(error)
    }
)

//响应拦截器
service.interceptors.response.use(
    response => {
        const res = response.data
        if(res.code != 200){
            //这里主要是判断code值 等于什么,代表着token值失效 例如:50008
            if(res.code == 50008){
               MessageBox.confirm("token值失效,请重新登录",{
                  confirmButtonText: "返回登录页",
                  cancelButtonText: "取消",
                  type: "warning"
               }).then(() => {
                //退回到登录页 需要将sessionStorage里面的值给清空掉
                sessionStorage.clear()
               })
           }
          return res
        }else{
          return res
        }
    },
    error => {
       return Promise.reject(error)
   }
)

export default service

步骤3:src文件夹下创建一个api文件夹 专门用来存放 请求接口的  例如api文件夹下创建了一个  user.js

import request from ‘@/util/http‘
//接口文件呢,post请求参数名为data,get请求参数名为params
export function login(data) {
    return request({
        url: ‘/system/login/login‘,
        method: ‘post‘,
        data
    })
}

export function loginOut(params) {
    return request({
        url: ‘/system/login/exit‘,
        method: ‘get‘,        params
    })
}

步骤4:做一个简单的路由拦截,在src文件夹下创建一个 permission.js    ,最后到main.js 中引入    import ‘@/permission‘

import router from ‘./router‘
import { getToken } from ‘./util/auth‘
const whiteList = [‘/login‘] // no redirect whitelist

router.beforeEach(async (to, from, next) => {

  // determine whether the user has logged in 确认用户是否已经登录了
  const hasToken = getToken()
  if (hasToken) {
    if (to.path === ‘/login‘) {
      // if is logged in, redirect to the home page 如果登录了就跳转到下面这个地址
      next({
        path: ‘/project/list‘
      })
    } else {
      if (hasToken) {
        next()
      } else {
        try {
          next()
        } catch (error) {
          // remove token and go to login page to re-login 删除token,重新登录
          Message.error(error || ‘Has Error‘)
          next(`/login?redirect=${to.path}`)
        }
      }
    }
  } else {
    /* has no token*/

    if (whiteList.indexOf(to.path) !== -1) {
      // in the free login whitelist, go directly  不需要登录就可以进入的页面
      next()
    } else {
      // other pages that do not have permission to access are redirected to the login page.  没有访问权限的其他页面被重定向到登录页面。
      // next(`/login?redirect=${to.path}`)
      next(`/login`)
    }
  }
})

以上 就是一个简单的axios请求封装以及一个简单的路由拦截

proxy解决前端跨域问题

在vue.config.js 文件中 设置 即可

module.exports = {
    devServer: {
        proxy: {
            "/system": {
                target: "http://www.baidu.com",
                changOrigin: true
            },
            "/project": {
                target: "http://www.baidu.com",
                changOrigin: true
            },
            "/facility": {
                target: "http://www.baidu.com",
                changOrigin: true
            },
            "/log": {
                target: "http://www.baidu.com",
                changOrigin: true
            },
            "/fileHandle": {
                target: "http://www.baidu.com",
                changOrigin: true
            }
        }
    }
}

    

原文地址:https://www.cnblogs.com/TreeCTJ/p/12698766.html

时间: 2024-11-09 16:30:02

vueCli3 封装axios 及 配置proxy跨域的相关文章

第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)

一. 说在前面的话 本节主要在前面章节的基础上补充了几个简单的知识点,比如:第三方调用通过 GlobalHost.ConnectionManager.GetHubContext<MySpecHub1>();来获取Hub对象,那么能不能封装一下不必每次都这么获取呢?再比如SignalR传输是否有大小限制,一下传输10w个字能否传输成功?最后着重整理一下跨域的各种使用情况,结合C/S程序充当客户端和服务器端. 本节内容包括: ①. SignalR与MVC或者WebApi简单的整合. ②. 全局的几

Nginx配置springboot-vue跨域

nginx-springboot-vue前后端分离跨域配置 引言 接着上篇--简单的springboot-vue前后端分离登录Session拦截的demo,其中跨域是通过springboot后端全局设置的,但是碰到了奇怪的问题,用了个不优雅的方式解决. 于是想到使用Nginx跨域应该就不会如此了. windows下载安装 http://nginx.org/ 下载稳定版,解压缩. 查看配置文件 /nginx-1.16.0/conf/nginx.conf : #gzip on; server { l

WCF配置问题(配置WCF跨域)

其它的先放一边.今天先来分享一下前段时间给公司做网站WCF服务接口的心得. 配置文件的配置问题 这里既然讨论WCF配置文件的问题,那么怎么创建的就不一一讲解了.好多博主都有提过的.所以直接分享自己开发时的收获,这里感谢好多给我启发的人,@好多人.... 我这里就拿登录接口来分享下吧. 先贴出代码. 这是服务端代码 因为ASP的兼容性问题,这里的AspNetCompatibilityRequirementsMode用Allowed(这里说一下,因为前段用Ajax调的接口,所以用了callback)

阿里云服务器ECS Apache、Nginx 配置支持跨域访问

问题描述 如何让 Apache.Nginx支持跨域访问. 处理办法 配置 Apache 跨域访问 步骤: 修改 httpd.conf. 把 LoadModule headers_module modules/mod_headers.so 前面的注释删除 修改  改为:  即: AllowOverride none Require all granted Header set Access-Control-Allow-Origin * 说明: 首先使用图形界面开启headers_module模块功

node.js配置允许跨域请求,设置允许携带的请求头参数

最近在用node.js写自己的后台时遇见了跨域问题,之前处理跨域都是在前端配置代理解决的,这次打算在后台解决,中途也遇到了一些坑,比如我在请求头里加了一个自定义的参数token,结果后台配置的时候没有允许请求能够携带该参数,造成预检请求发出后,就没任何响应了.为此折腾了半天才发现问题...还是对它不够了解,所以查阅了相关资料,下面做出自己的理解: 都知道跨域是因为浏览器的同源策略造成的,当客户端访问服务端时,如果两端的ip.端口.协议任意一个不同就会产生跨域.下面介绍node.js后台如何配置允

React里配置接口跨域代理【亲测完美实现~】

这种问题当然离不了官网妈妈的支持:传送门 官网给了三种解决方案.前两种我就不赘述了(主要是因为我没用) 而官网的第三种推荐的方式: 1.安装依赖: $ npm install http-proxy-middleware --save $ # or $ yarn add http-proxy-middleware 2.在“src”文件夹下新建“setupProxy.js”文件.并做官网推荐的配置- 理论上,在正确的路径下新建setupProxy.js完毕,你只需要把下边这段官网的代码抄过来就可以了

vue webpack配置解决跨域问题

现在基本项目都是实行前后端分离的原则,不管是ng 或者是vue 在开发中都无法避免跨域的这个问题 本人刚上手第一个vue项目,在调用api的时候出现了跨域的这个问题 这是封装好一个简单的post 请求 http.js post (url, data) { return axios({ method: 'post', baseURL: '/api', url, data: data, timeout: 10000, headers: { 'X-Requested-With': 'XMLHttpRe

VUE3.0升级与配置(跨域等)

1.检查本机vue版本 vue -V 2.升级vue3.0命令 npm install -g @vue/cli 3.创建完项目后,在项目根目录新增vue.config.js文件,插入代码(简洁) 1 module.exports = { 2 runtimeCompiler: true, //是否使用包含运行时编译器的 Vue 构建版本 3 publicPath: '', 4 productionSourceMap: false, //不在production环境使用SourceMap 5 dev

Web API 实现JSONP或者安装配置Cors跨域

前言 照理来说本节也应该讲Web API原理,目前已经探讨完了比较底层的Web API消息处理管道以及Web Host寄宿管道,接下来应该要触及控制器.Action方法,以及过滤器.模型绑定等等,想想也是心痛不已,水太深了,摸索原理关键是太枯燥和乏味了,但是呢,从情感上还是挺乐意去摸索原理,而情绪上不太乐意去探究原理,于是乎,本文就由此诞生了,借此文缓解下枯燥的心情和压抑的情绪.后续继续摸索原理. 接下来我们要讲的就是利用JSONP和利用Cors这两种方式来实现跨域,请看下文..... JSON