YesPlayMusic/src/utils/request.js

76 lines
1.9 KiB
JavaScript

import axios from 'axios';
import { getCookie, doLogout } from '@/utils/auth';
import router from '@/router';
let baseURL = '';
// Web 和 Electron 跑在不同端口避免同时启动时冲突
if (process.env.IS_ELECTRON) {
if (process.env.NODE_ENV === 'production') {
baseURL = process.env.VUE_APP_ELECTRON_API_URL;
} else {
baseURL = process.env.VUE_APP_ELECTRON_API_URL_DEV;
}
} else {
baseURL = process.env.VUE_APP_NETEASE_API_URL;
}
const service = axios.create({
baseURL,
withCredentials: true,
timeout: 15000,
});
service.interceptors.request.use(function (config) {
if (!config.params) config.params = {};
if (baseURL.length) {
if (baseURL[0] !== '/' && !process.env.IS_ELECTRON) {
config.params.cookie = `MUSIC_U=${getCookie('MUSIC_U')};`;
}
} else {
console.error("You must set up the baseURL in the service's config");
}
if (!process.env.IS_ELECTRON && !config.url.includes('/login')) {
config.params.realIP = '211.161.244.70';
}
const proxy = JSON.parse(localStorage.getItem('settings')).proxyConfig;
if (['HTTP', 'HTTPS'].includes(proxy.protocol)) {
config.params.proxy = `${proxy.protocol}://${proxy.server}:${proxy.port}`;
}
return config;
});
service.interceptors.response.use(
response => {
const res = response.data;
return res;
},
async error => {
/** @type {import('axios').AxiosResponse | null} */
const response = error.response;
const data = response.data;
if (
response &&
typeof data === 'object' &&
data.code === 301 &&
data.msg === '需要登录'
) {
console.warn('Token has expired. Logout now!');
// 登出帳戶
doLogout();
// 導向登入頁面
if (process.env.IS_ELECTRON === true) {
router.push({ name: 'loginAccount' });
} else {
router.push({ name: 'login' });
}
}
}
);
export default service;