mirror of
https://github.com/YMFE/yapi.git
synced 2024-12-21 05:19:42 +08:00
63 lines
2.1 KiB
JavaScript
63 lines
2.1 KiB
JavaScript
import yapi from '../yapi.js';
|
||
import projectModel from '../models/project.js'
|
||
import interfaceModel from '../models/interface.js'
|
||
import Mock from 'mockjs'
|
||
|
||
module.exports = async (ctx, next) => {
|
||
yapi.commons.log('mock Server running...')
|
||
let hostname = ctx.protocol + "://" + ctx.hostname;
|
||
let config = yapi.WEBCONFIG;
|
||
if(ctx.hostname === config.webhost){
|
||
if(next) await next();
|
||
return true;
|
||
}
|
||
let projectInst = yapi.getInst(projectModel), projects;
|
||
try{
|
||
projects = await projectInst.getByDomain(hostname);
|
||
}catch(e){
|
||
return ctx.body = yapi.commons.resReturn(null, 403, e.message);
|
||
}
|
||
|
||
let matchProject = false, maxBasepath = 0;
|
||
for(let i=0, l = projects.length; i< l; i++){
|
||
let project = projects[i];
|
||
if(ctx.path && ctx.path.indexOf(project.basepath) === 0 && project.basepath[project.basepath.length -1] === '/'){
|
||
matchProject.push(project);
|
||
if(project.basepath.length > maxBasepath){
|
||
maxBasepath = project.basepath.length;
|
||
matchProject = project;
|
||
}
|
||
}
|
||
}
|
||
|
||
if(matchProject === false){
|
||
return ctx.body = yapi.commons.resReturn(null, 400, '不存在的domain');
|
||
}
|
||
|
||
let project = matchProject, interfaceData;
|
||
let interfaceInst = yapi.getInst(interfaceModel);
|
||
try{
|
||
interfaceData = await interfaceInst.getByPath(project._id, ctx.path.substr(project.basepath.length));
|
||
|
||
if(!interfaceData || interfaceData.length === 0){
|
||
return ctx.body = yapi.commons.resReturn(null, 404, '不存在的api');
|
||
}
|
||
|
||
if(interfaceData.length > 1){
|
||
return ctx.body = yapi.commons.resReturn(null, 405, '存在多个api,请检查数据库');
|
||
}
|
||
|
||
interfaceData = interfaceData[0];
|
||
|
||
if(interfaceData.res_body_type === 'json'){
|
||
return ctx.body = Mock.mock(
|
||
yapi.commons.json_parse(interfaceData.res_body)
|
||
);
|
||
}
|
||
return ctx.body = interfaceData.res_body;
|
||
}catch(e){
|
||
return ctx.body = yapi.commons.resReturn(null, 409, e.message);
|
||
}
|
||
|
||
|
||
} |