1. vue前端实战注意事项
1.1. 预备
1.1.1. Eslint
- 这是个语法检查工具,我用webstorm作为开发的ide,这个语法检查还是太严格了,一个空格啥的都会报错,对新手来讲还是建议关闭,需要关闭的地方主要有两个,webstorm自身设置,在settings里搜Eslint,如下
代码里找到webpack.base.conf.js
文件,注掉如下
1.1.2. 接口基地址
1.1.3. config/index.js
- 找到
index.js
文件,如果项目在开发阶段,建议devtool: ‘source-map‘
设置成这样,否则可能会造成你的调试困难
1.2. 权限
import router from './router' import store from './store' import NProgress from 'nprogress' // Progress 进度条 import 'nprogress/nprogress.css'// Progress 进度条样式 import { Message } from 'element-ui' import { getToken } from '@/utils/auth' // 验权 const whiteList = ['/login'] // 不重定向白名单 router.beforeEach((to,from,next) => { NProgress.start() if (getToken()) { if (to.path === '/login') { next({ path: '/' }) } else { if (store.getters.roles.length === 0) { store.dispatch('GetInfo').then(res => { // 拉取用户信息 next() }).catch(() => { store.dispatch('Fedlogout').then(() => { Message.error('验证失败,请重新登录') next({ path: '/login' }) }) }) } else { next() } } } else { if (whiteList.indexOf(to.path) !== -1) { next() } else { next('/login') NProgress.done() } } }) router.afterEach(() => { NProgress.done() // 结束Progress })
1.3. token
import axios from 'axios' import { Message,MessageBox } from 'element-ui' import store from '../store' import { getToken,setToken } from '@/utils/auth' // 创建axios实例 const service = axios.create({ baseURL: process.env.BASE_API,// api的base_url timeout: 15000 // 请求超时时间 }) // request拦截器 service.interceptors.request.use(config => { if (store.getters.token) { config.headers['X-Token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 } return config },error => { // Do something with request error console.log(error) // for debug Promise.reject(error) }) // respone拦截器 service.interceptors.response.use( response => { /** * code为非200是抛错 可结合自己业务进行修改 */ const res = response.data if (res.code !== 200) { Message({ message: res.message,type: 'error',duration: 5 * 1000 }) setToken('') // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 50008 || res.code === 50012 || res.code === 50014) { MessageBox.confirm('你已被登出,可以取消继续留在该页面,或者重新登录','确定登出',{ confirmButtonText: '重新登录',cancelButtonText: '取消',type: 'warning' }).then(() => { store.dispatch('Fedlogout').then(() => { location.reload()// 为了重新实例化vue-router对象 避免bug }) }) } return Promise.reject('error') } else { return response.data } },error => { console.log('err' + error)// for debug Message({ message: error.message,duration: 5 * 1000 }) return Promise.reject(error) } ) export default service
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。