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) }