/* 新版很多接口只是改了接口名字,参数和请求类型并没有修改,只需要建立一个map来处理这个改动就行。 */ const normalRequestMap = { } // 有些url里面包含了可变的参数,需要遍历一遍,用正则找到对应的url const paramRequestOldUrlArray = [ // /\/api\/v1\/careers\/(\w*)\/edit/i, // /\/api\/v1\/games\/(\w*)\/rep_content/i, // /api/v1/games/rwvl6htgoufi/entries // /\/api\/v1\/games\/(\w*)\/entries/i, // `/api/v1/games/${game.identifier}/choose_build` /\/api\/v1\/games\/(\w*)\/choose_build/i ] const paramRequestNewUrlArray = [ // 获取代码内容 // (matchResult) => { // const stageId = matchResult[1] // return `/tasks/${stageId}/rep_content.json` // }, // 获取版本库目录、文件 // http://testeduplus2.educoder.net/tasks/se79x25pzfwo/git_entries.json?path=&dev=master&gpid=3441 // (matchResult) => { // const stageId = matchResult[1] // // return `/tasks/${stageId}/git_entries.json` // return `/myshixuns/${stageId}/repository.json` // }, // `/tasks/tonblikwzj78/choose_build.json` (matchResult) => { const stageId = matchResult[1] return `/tasks/${stageId}/choose_build.json` }, ] export function requestProxy(config) { // return config; const url = config.url; if (url.indexOf('.json') !== -1) { // 已经是新接口了 return config; } // TODO 为true的话会报错 Error: Network Error config.withCredentials = false; const oldUrlSplitPathArray = url.split('?'); let oldPath = oldUrlSplitPathArray[0] let newPath, newUrl; newPath = normalRequestMap[oldPath]; if (!newPath) { // 是带参的restful风格的url paramRequestOldUrlArray.forEach((item, index) => { const matchResult = oldPath.match(item); if (matchResult) { // 找到了对应的restful api url const newUrlGenerator = paramRequestNewUrlArray[index]; newPath = newUrlGenerator && newUrlGenerator(matchResult) newUrl = `${newPath}?${oldUrlSplitPathArray[1]}` config.url = newUrl return config; } }); } return config; } /** ('/api/v1/careers/qweqw/edit/').match(/\/api\/v1\/careers\/(\w*)\/edit/i) 0: "/api/v1/careers/qweqw/edit" 1: "qweqw" example: `/api/v1/games/${this.props.game.identifier}/answer_grade` -> `/tasks/${this.props.game.identifier}/answer_grade.json` https://testeduplus2.educoder.net/api/v1/games/feguz4tiqpvx/rep_content ?path=src/step2/CLnkQueue.cpp&shixun_gpid=2791&status=0&retry=0 -> http://testeduplus2.educoder.net/tasks/tonblikwzj78/rep_content.json ?path=1-4.py&shixun_gpid=2448&status=0 */