1. // vue.config.js
    2. module.exports = {
    3. // lintOnSave: false,
    4. publicPath: './',
    5. outputDir: 'dist',
    6. // transpileDependencies: [
    7. // /@lerna-demo/
    8. // ],
    9. devServer: {
    10. host: process.env.VUE_APP_BASE_HOST,
    11. port: process.env.VUE_APP_BASE_PORT,
    12. overlay: {
    13. warnings: false,
    14. errors: true
    15. },
    16. proxy: {
    17. '/api': {
    18. target: process.env.VUE_APP_BASE_API,
    19. changeOrigin: true
    20. },
    21. }
    22. }
    23. }
    1. // .env.development
    2. ENV = 'development'
    3. # base api
    4. VUE_APP_BASE_API = 'http://192.168.9.83'
    5. VUE_APP_BASE_PORT = 3000
    6. VUE_APP_BASE_HOST = 192.168.9.83
    1. // http.js
    2. /**
    3. * axios封装
    4. * 请求拦截、响应拦截、错误统一处理
    5. */
    6. import axios from 'axios'
    7. import qs from 'qs'
    8. import {
    9. Message
    10. } from 'element-ui'
    11. /**
    12. * 提示函数
    13. * 禁止点击蒙层、显示一秒后关闭
    14. */
    15. const tip = (msg) => {
    16. Message({
    17. message: msg,
    18. duration: 1000 * 5,
    19. type: 'error'
    20. })
    21. }
    22. /**
    23. * 跳转登录页
    24. * 携带当前页面路由,以期在登录页面完成登录后返回当前页面
    25. */
    26. const toLogin = () => {
    27. }
    28. /**
    29. * 请求失败后的错误统一处理
    30. * @param {Number} status 请求失败的状态码
    31. */
    32. const errorHandle = (status, other) => {
    33. // 状态码判断
    34. switch (status) {
    35. // 100: 请求参数有误
    36. case 400:
    37. tip(other)
    38. // toLogin();
    39. break
    40. // 403 token过期
    41. // 清除token并跳转登录页
    42. case 101:
    43. tip('无权限查看')
    44. setTimeout(async () => {
    45. toLogin()
    46. }, 1000)
    47. break
    48. // 404请求不存在
    49. case 401:
    50. tip(other)
    51. setTimeout(async () => {
    52. toLogin()
    53. }, 1000)
    54. break
    55. case 404:
    56. tip(other)
    57. break
    58. default:
    59. console.log('other', other)
    60. }
    61. }
    62. // 创建axios实例
    63. var instance = axios.create({
    64. timeout: 0
    65. })
    66. // 设置post请求头
    67. instance.defaults.headers.post['Content-Type'] =
    68. 'application/json;charset=UTF-8'
    69. instance.defaults.baseURL = process.env.VUE_APP_BASE_API
    70. /**
    71. * 请求拦截器
    72. * 每次请求前,如果存在token则在请求头中携带token
    73. */
    74. instance.interceptors.request.use(
    75. (config) => {
    76. // 登录流程控制中,根据本地是否存在token判断用户的登录情况
    77. // 但是即使token存在,也有可能token是过期的,所以在每次的请求头中携带token
    78. // 后台根据携带的token判断用户的登录情况,并返回给我们对应的状态码
    79. // 而后我们可以在响应拦截器中,根据状态码进行一些统一的操作。
    80. // const token = store.state.user.token
    81. // const uid = store.state.user.uid
    82. // token && (config.headers['access-token'] = token)
    83. // uid && (config.headers['token-uid'] = uid)
    84. return config
    85. },
    86. (error) => Promise.error(error)
    87. )
    88. // 响应拦截器
    89. instance.interceptors.response.use(
    90. // 请求成功
    91. (res) => {
    92. const {
    93. data
    94. } = res
    95. if (data.code === 200) {
    96. return Promise.resolve(data)
    97. } else {
    98. errorHandle(data.code, data.msg)
    99. return Promise.reject(res)
    100. }
    101. },
    102. // 请求失败
    103. (error) => {
    104. const {
    105. response
    106. } = error
    107. if (response) {
    108. // 请求已发出,但是不在0的范围
    109. errorHandle(response.code, response.msg)
    110. return Promise.reject(response)
    111. } else {
    112. // 处理断网的情况
    113. // eg:请求超时或断网时,更新state的network状态
    114. // network状态在app.vue中控制着一个全局的断网提示组件的显示隐藏
    115. // 关于断网组件中的刷新重新获取数据,会在断网组件中说明
    116. if (!window.navigator.onLine) {
    117. // store.commit('changeNetwork', false)
    118. } else {
    119. return Promise.reject(error)
    120. }
    121. }
    122. return Promise.reject(error)
    123. }
    124. )
    125. const get = (url, params = {}) => {
    126. return instance.get(url, {
    127. params
    128. })
    129. }
    130. const post = (url, params = {}) => {
    131. return instance.post(url, qs.stringify(params), {
    132. headers: {
    133. 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
    134. }
    135. })
    136. }
    137. export {
    138. get,
    139. post
    140. }