fix: mongodb auth bug and perfect mockServer

This commit is contained in:
suxiaoxin 2017-08-15 12:05:22 +08:00
parent aabc83ac57
commit 2f0a733776
6 changed files with 88 additions and 95 deletions

View File

@ -29,7 +29,7 @@ class InterfaceEdit extends Component{
super(props)
const {curdata, currProject} = this.props;
this.state = {
mockUrl: location.protocol + '//' + location.hostname + (location.port !== "" ? ":" + location.port : "") + `/mock/${currProject._id}${currProject.basepath}/${curdata.path}`
mockUrl: location.protocol + '//' + location.hostname + (location.port !== "" ? ":" + location.port : "") + `/mock/${currProject._id}${currProject.basepath}${curdata.path}`
}
}

View File

@ -86,7 +86,7 @@ function run(options) {
if (typeof data === 'string') {
editor.setValue(data);
} else if (typeof data === 'object') {
editor.setValue(JSON.stringify(data, null, " "))
editor.setValue(json5(data, null, " "))
}
},
editor: editor

View File

@ -8,45 +8,39 @@ module.exports = async (ctx, next) => {
let hostname = ctx.hostname;
let config = yapi.WEBCONFIG;
let path = ctx.path;
if (ctx.hostname === config.webhost) {
if (path.indexOf('/mock/') !== 0) {
if (next) await next();
return true;
}
let paths = path.split("/");
let projectId = paths[2];
paths.splice(0, 3);
path = "/" + paths.join("/");
if(!projectId){
return ctx.body = yapi.commons.resReturn(null, 400, 'projectId不能为空');
}
yapi.commons.log('MockServer Running...');
let projectInst = yapi.getInst(projectModel), projects;
let projectInst = yapi.getInst(projectModel), project;
try {
projects = await projectInst.getByDomain(hostname);
project = await projectInst.get(projectId);
} catch (e) {
return ctx.body = yapi.commons.resReturn(null, 403, e.message);
}
let matchProject = [], maxBasepath = 0;
for (let i = 0, l = projects.length; i < l; i++) {
let project = projects[i];
if(ctx.path && project.basepath == ""){
matchProject = project;
}
else if (ctx.path && ctx.path.indexOf(project.basepath) === 0) {
if (project.basepath.length > maxBasepath) {
maxBasepath = project.basepath.length;
matchProject = project;
}
}
if (project === false) {
return ctx.body = yapi.commons.resReturn(null, 400, '不存在的项目');
}
if (matchProject === false) {
return ctx.body = yapi.commons.resReturn(null, 400, '不存在的domain');
}
let project = matchProject, interfaceData;
let interfaceData;
let interfaceInst = yapi.getInst(interfaceModel);
try {
interfaceData = await interfaceInst.getByPath(project._id, ctx.path.substr(project.basepath.length), ctx.method);
interfaceData = await interfaceInst.getByPath(project._id, path.substr(project.basepath.length), ctx.method);
if (!interfaceData || interfaceData.length === 0) {
//非正常跨域预检请求回应
if(ctx.method === 'OPTIONS'){

View File

@ -18,10 +18,11 @@ function connect() {
let config = yapi.WEBCONFIG;
let options = {};
if (config.user) {
if (config.db.user) {
options.user = config.db.user;
options.pass = config.db.pass;
}
let db = mongoose.connect(`mongodb://${config.db.servername}:${config.db.port}/${config.db.DATABASE}`, options);

View File

@ -12,9 +12,9 @@ var _yapi = require('../yapi.js');
var _yapi2 = _interopRequireDefault(_yapi);
var _project2 = require('../models/project.js');
var _project = require('../models/project.js');
var _project3 = _interopRequireDefault(_project2);
var _project2 = _interopRequireDefault(_project);
var _interface = require('../models/interface.js');
@ -28,8 +28,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
module.exports = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx, next) {
var hostname, config, projectInst, projects, matchProject, maxBasepath, i, l, _project, project, interfaceData, interfaceInst, res;
var hostname, config, path, paths, projectId, projectInst, project, interfaceData, interfaceInst, res;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
@ -38,82 +37,81 @@ module.exports = function () {
hostname = ctx.hostname;
config = _yapi2.default.WEBCONFIG;
path = ctx.path;
if (!(ctx.hostname === config.webhost)) {
_context.next = 8;
if (!(path.indexOf('/mock/') !== 0)) {
_context.next = 9;
break;
}
if (!next) {
_context.next = 7;
_context.next = 8;
break;
}
_context.next = 7;
_context.next = 8;
return next();
case 7:
case 8:
return _context.abrupt('return', true);
case 8:
case 9:
paths = path.split("/");
projectId = paths[2];
_yapi2.default.commons.log('MockServer Running...');
projectInst = _yapi2.default.getInst(_project3.default), projects = void 0;
_context.prev = 10;
_context.next = 13;
return projectInst.getByDomain(hostname);
paths.splice(0, 3);
path = "/" + paths.join("/");
case 13:
projects = _context.sent;
_context.next = 19;
break;
case 16:
_context.prev = 16;
_context.t0 = _context['catch'](10);
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 403, _context.t0.message));
case 19:
matchProject = [], maxBasepath = 0;
for (i = 0, l = projects.length; i < l; i++) {
_project = projects[i];
if (ctx.path && _project.basepath == "") {
matchProject = _project;
} else if (ctx.path && ctx.path.indexOf(_project.basepath) === 0) {
if (_project.basepath.length > maxBasepath) {
maxBasepath = _project.basepath.length;
matchProject = _project;
}
}
}
if (!(matchProject === false)) {
_context.next = 23;
if (projectId) {
_context.next = 15;
break;
}
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '不存在的domain'));
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, 'projectId不能为空'));
case 15:
_yapi2.default.commons.log('MockServer Running...');
projectInst = _yapi2.default.getInst(_project2.default), project = void 0;
_context.prev = 17;
_context.next = 20;
return projectInst.get(projectId);
case 20:
project = _context.sent;
_context.next = 26;
break;
case 23:
project = matchProject, interfaceData = void 0;
interfaceInst = _yapi2.default.getInst(_interface2.default);
_context.prev = 25;
_context.next = 28;
return interfaceInst.getByPath(project._id, ctx.path.substr(project.basepath.length), ctx.method);
_context.prev = 23;
_context.t0 = _context['catch'](17);
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 403, _context.t0.message));
case 26:
if (!(project === false)) {
_context.next = 28;
break;
}
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '不存在的项目'));
case 28:
interfaceData = void 0;
interfaceInst = _yapi2.default.getInst(_interface2.default);
_context.prev = 30;
_context.next = 33;
return interfaceInst.getByPath(project._id, path.substr(project.basepath.length), ctx.method);
case 33:
interfaceData = _context.sent;
if (!(!interfaceData || interfaceData.length === 0)) {
_context.next = 35;
_context.next = 40;
break;
}
if (!(ctx.method === 'OPTIONS')) {
_context.next = 34;
_context.next = 39;
break;
}
@ -121,54 +119,54 @@ module.exports = function () {
ctx.set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
return _context.abrupt('return', ctx.body = 'ok');
case 34:
case 39:
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 404, '不存在的api'));
case 35:
case 40:
if (!(interfaceData.length > 1)) {
_context.next = 37;
_context.next = 42;
break;
}
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 405, '存在多个api请检查数据库'));
case 37:
case 42:
interfaceData = interfaceData[0];
ctx.set("Access-Control-Allow-Origin", "*");
if (!(interfaceData.res_body_type === 'json')) {
_context.next = 48;
_context.next = 53;
break;
}
_context.prev = 40;
_context.prev = 45;
res = _mockjs2.default.mock(_yapi2.default.commons.json_parse(interfaceData.res_body));
return _context.abrupt('return', ctx.body = res);
case 45:
_context.prev = 45;
_context.t1 = _context['catch'](40);
case 50:
_context.prev = 50;
_context.t1 = _context['catch'](45);
return _context.abrupt('return', ctx.body = {
errcode: 400,
errmsg: 'mock json数据格式有误',
data: interfaceData.res_body
});
case 48:
case 53:
return _context.abrupt('return', ctx.body = interfaceData.res_body);
case 51:
_context.prev = 51;
_context.t2 = _context['catch'](25);
case 56:
_context.prev = 56;
_context.t2 = _context['catch'](30);
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 409, _context.t2.message));
case 54:
case 59:
case 'end':
return _context.stop();
}
}
}, _callee, undefined, [[10, 16], [25, 51], [40, 45]]);
}, _callee, undefined, [[17, 23], [30, 56], [45, 50]]);
}));
return function (_x, _x2) {

View File

@ -30,7 +30,7 @@ function connect() {
var config = _yapi2.default.WEBCONFIG;
var options = {};
if (config.user) {
if (config.db.user) {
options.user = config.db.user;
options.pass = config.db.pass;
}