| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import _ from 'lodash'
- import axios from 'axios'
- const DataFormatError = new Error('后台响应数据格式异常')
- export default ({store, app, req}, inject) => {
- const service = axios.create({
- withCredentials: true,
- // 根据运行环境确定请求BaseUrl
- baseURL: process.server ? process.env.baseUrl : '/'
- })
- service.interceptors.request.use(config => {
- if (process.server) {
- // 服务器端发送请求时,使用浏览器的客户端信息和Cookie
- config.headers.cookie = req.headers.cookie || ''
- config.headers['User-Agent'] = req.headers['user-agent']
- }
- return config
- }, error => {
- return Promise.reject(error)
- })
- // Add a response interceptor to handle responses
- service.interceptors.response.use(function (response) {
- const body = response.data
- // Check whether response data is unified format `Object`.
- if (_.isString(body)) {
- return Promise.reject(DataFormatError.message)
- }
- if (!body.success) {
- return Promise.reject(body.message)
- }
- return body.data
- }, function (error) {
- // Unified handle errors
- let err = null
- if (error.response) {
- // The request was made and the server responded with a status code
- // that falls out of the range of 2xx
- const response = error.response
- err = response.data && response.data.message ? response.data.message : response
- } else if (error.request) {
- // The request was made but no response was received
- // `error.request` is an instance of XMLHttpRequest in the browser
- // and an instance of http.ClientRequest in node.js
- err = error.request
- } else {
- // Something happened in setting up the request that triggered an Error
- err = error.message
- }
- return Promise.reject(err)
- })
- inject('axios', service)
- }
|