import React from "react"; import axios from 'axios'; import { requestProxy } from "./indexEduplus2RequestProxy"; import { broadcastChannelOnmessage ,SetAppModel, isDev, queryString } from 'educoder'; import { notification } from 'antd'; import './index.css' broadcastChannelOnmessage('refreshPage', () => { window.location.reload() }) function locationurl(list){ debugger if (window.location.port === "3007") { } else { window.location.replace(list) } } let hashTimeout // TODO 开发期多个身份切换 let debugType ="" if (isDev) { const _search = window.location.search; let parsed = {}; if (_search) { parsed = queryString.parse(_search); } debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' : window.location.search.indexOf('debug=s') != -1 ? 'student' : window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin' } window._debugType = debugType; export function initAxiosInterceptors(props) { // TODO 避免重复的请求 https://github.com/axios/axios#cancellation // https://github.com/axios/axios/issues/1497 // TODO 读取到package.json中的配置? var proxy = "http://localhost:3000" // proxy = "http://testbdweb.trustie.net" // proxy = "http://testbdweb.educoder.net" // proxy = "https://testeduplus2.educoder.net" proxy="http://47.96.87.25:48080" // wy proxy="https://pre-newweb.educoder.net" // wy // proxy="http://192.168.2.63:3001" // 在这里使用requestMap控制,避免用户通过双击等操作发出重复的请求; // 如果需要支持重复的请求,考虑config里面自定义一个allowRepeat参考来控制 const requestMap = {}; window.setfalseInRequestMap = function(keyName) { requestMap[keyName] = false; } axios.interceptors.request.use( config => { // if (token) { // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了 // config.headers.Authorization = token; // } // --------------------------------------------- 測試3007连测试服的代码 // if (url.indexOf('file_update') != -1 || url.indexOf('game_build') != -1 || url.indexOf('game_status') != -1) { // proxy = 'https://testbdweb.trustie.net' // } else { // proxy = 'http://localhost:3000' // } // --------------------------------------------- if (config.url.indexOf(proxy) != -1 || config.url.indexOf(':') != -1) { return config } requestProxy(config) var url = `/api${config.url}`; if(`${config[0]}`!=`true`){ if (window.location.port === "3007") { if (url.indexOf('.json') == -1) { alert('开发提示:请给接口加.json:' + url) } config.url = `${proxy}${url}`; if (config.url.indexOf('?') == -1) { config.url = `${config.url}?debug=${debugType}` } else { config.url = `${config.url}&debug=${debugType}` } } else { // 加api前缀 config.url = url; } } if (requestMap[config.url] === true) { // 避免重复的请求 return false; } // 非file_update请求 if (config.url.indexOf('update_file') === -1) { requestMap[config.url] = true; window.setTimeout("setfalseInRequestMap('"+config.url+"')", 900) } // setTimeout("setfalseInRequestMap(" + config.url + ")", 1200) return config; }, err => { return Promise.reject(err); }); axios.interceptors.response.use(function (response) { // console.log(".............") if(response===undefined){ return } const config = response.config if (response.data.status === -1) { // console.error('error:', response.data.message) // throw new Error() // https://github.com/axios/axios/issues?utf8=%E2%9C%93&q=cancel+request+in+response+interceptors+ // https://github.com/axios/axios/issues/583 // message.info(response.data.message || '服务端返回status -1,请联系管理员。'); // props.showSnackbar( response.data.message || '服务器异常,请联系管理员。' ) if (window.location.pathname.startsWith('/tasks/')) { props.showSnackbar( response.data.message || '服务器异常,请联系管理员。' ) } else { notification.open({ message:"提示", description: response.data.message || '服务器异常,请联系管理员。', style: { zIndex: 99999999 }, }); // notification['error']({ // message:"提示", // description: response.data.message || '服务器异常,请联系管理员。', // }); } throw new axios.Cancel('Operation canceled by the user.'); } else { // hash跳转 var hash = window.location.hash; if (hash) { hashTimeout && window.clearTimeout(hashTimeout) hashTimeout = setTimeout(() => { var element = document.querySelector(hash); if (element) { element.scrollIntoView(); } }, 400) } } // if(response.data.status === 401){ // console.log("401401401") // } if (response.data.status === 403||response.data.status === "403") { locationurl('/403'); } if (response.data.status === 404) { locationurl('/nopage'); } if (response.data.status === 500) { locationurl('/500'); } // if (response.data.status === 402) { // console.log(response.data.status); // console.log(response.data); // // locationurl(402); // } // // if (response.data.status === 401) { // console.log("161"); // console.log(config); // return config; // } // if (response.data.status === 407) { // 在app js 中解决 Trialapplication // // // ///在appjs // notification.open({ // message:"提示", // description: "账号未认证", // }); // throw new axios.Cancel('Operation canceled by the user.'); // // // } requestMap[response.config.url] = false; return response; }, function (error) { return Promise.reject(error); }); // ----------------------------------------------------------------------------------- }