@booxood/mocker-api
Version:
This is dev support mock RESTful API.
103 lines (85 loc) • 9.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.mockerHandle = mockerHandle;
var _url = _interopRequireDefault(require("url"));
var _bodyParser = _interopRequireDefault(require("body-parser"));
var _utils = require("./utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function mockerHandle(param) {
const {
options = {},
req,
res,
next,
mocker,
mockerKey
} = param || {};
let bodyParserMethd = _bodyParser.default.json({ ...options.bodyParserJSON
}); // 默认使用json解析
/**
* `application/x-www-form-urlencoded; charset=UTF-8` => `application/x-www-form-urlencoded`
* Issue: https://github.com/jaywcjlove/mocker-api/issues/50
*/
let contentType = req.get('Content-Type');
contentType = contentType && contentType.replace(/;.*$/, '');
if (options.bodyParserConf && options.bodyParserConf[contentType]) {
// 如果存在options.bodyParserConf配置 {'text/plain': 'text','text/html': 'text'}
switch (options.bodyParserConf[contentType]) {
// 获取bodyParser的方法
case 'raw':
bodyParserMethd = _bodyParser.default.raw({ ...options.bodyParserRaw
});
break;
case 'text':
bodyParserMethd = _bodyParser.default.text({ ...options.bodyParserText
});
break;
case 'urlencoded':
bodyParserMethd = _bodyParser.default.urlencoded({
extended: false,
...options.bodyParserUrlencoded
});
break;
case 'json':
bodyParserMethd = _bodyParser.default.json({ ...options.bodyParserJSON
});
//使用json解析 break;
}
} else {
// 兼容原来的代码,默认解析
// Compatible with the original code, default parsing
switch (contentType) {
case 'text/plain':
bodyParserMethd = _bodyParser.default.raw({ ...options.bodyParserRaw
});
break;
case 'text/html':
bodyParserMethd = _bodyParser.default.text({ ...options.bodyParserText
});
break;
case 'application/x-www-form-urlencoded':
bodyParserMethd = _bodyParser.default.urlencoded({
extended: false,
...options.bodyParserUrlencoded
});
break;
}
}
bodyParserMethd(req, res, function () {
const result = mocker[mockerKey];
if (typeof result === 'function') {
const rgxStr = ~mockerKey.indexOf(' ') ? ' ' : '';
req.params = (0, _utils.pathMatch)({
sensitive: false,
strict: false,
end: false
})(mockerKey.split(new RegExp(rgxStr))[1])(_url.default.parse(req.url).pathname);
result(req, res, next);
} else {
res.json(result);
}
});
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tb2NrZXJIYW5kbGUudHMiXSwibmFtZXMiOlsibW9ja2VySGFuZGxlIiwicGFyYW0iLCJvcHRpb25zIiwicmVxIiwicmVzIiwibmV4dCIsIm1vY2tlciIsIm1vY2tlcktleSIsImJvZHlQYXJzZXJNZXRoZCIsImJvZHlQYXJzZXIiLCJqc29uIiwiYm9keVBhcnNlckpTT04iLCJjb250ZW50VHlwZSIsImdldCIsInJlcGxhY2UiLCJib2R5UGFyc2VyQ29uZiIsInJhdyIsImJvZHlQYXJzZXJSYXciLCJ0ZXh0IiwiYm9keVBhcnNlclRleHQiLCJ1cmxlbmNvZGVkIiwiZXh0ZW5kZWQiLCJib2R5UGFyc2VyVXJsZW5jb2RlZCIsInJlc3VsdCIsInJneFN0ciIsImluZGV4T2YiLCJwYXJhbXMiLCJzZW5zaXRpdmUiLCJzdHJpY3QiLCJlbmQiLCJzcGxpdCIsIlJlZ0V4cCIsIlVSTCIsInBhcnNlIiwidXJsIiwicGF0aG5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7OztBQVdPLFNBQVNBLFlBQVQsQ0FBc0JDLEtBQXRCLEVBQWtEO0FBQ3ZELFFBQU07QUFBRUMsSUFBQUEsT0FBTyxHQUFHLEVBQVo7QUFBZ0JDLElBQUFBLEdBQWhCO0FBQXFCQyxJQUFBQSxHQUFyQjtBQUEwQkMsSUFBQUEsSUFBMUI7QUFBZ0NDLElBQUFBLE1BQWhDO0FBQXdDQyxJQUFBQTtBQUF4QyxNQUFzRE4sS0FBSyxJQUFJLEVBQXJFOztBQUNBLE1BQUlPLGVBQWUsR0FBR0Msb0JBQVdDLElBQVgsQ0FBZ0IsRUFBRSxHQUFHUixPQUFPLENBQUNTO0FBQWIsR0FBaEIsQ0FBdEIsQ0FGdUQsQ0FFZTs7QUFDdEU7QUFDRjtBQUNBO0FBQ0E7OztBQUNFLE1BQUlDLFdBQVcsR0FBR1QsR0FBRyxDQUFDVSxHQUFKLENBQVEsY0FBUixDQUFsQjtBQUNBRCxFQUFBQSxXQUFXLEdBQUdBLFdBQVcsSUFBSUEsV0FBVyxDQUFDRSxPQUFaLENBQW9CLE1BQXBCLEVBQTRCLEVBQTVCLENBQTdCOztBQUNBLE1BQUdaLE9BQU8sQ0FBQ2EsY0FBUixJQUEwQmIsT0FBTyxDQUFDYSxjQUFSLENBQXVCSCxXQUF2QixDQUE3QixFQUFrRTtBQUNoRTtBQUNBLFlBQU9WLE9BQU8sQ0FBQ2EsY0FBUixDQUF1QkgsV0FBdkIsQ0FBUDtBQUE0QztBQUMxQyxXQUFLLEtBQUw7QUFBWUosUUFBQUEsZUFBZSxHQUFHQyxvQkFBV08sR0FBWCxDQUFlLEVBQUMsR0FBR2QsT0FBTyxDQUFDZTtBQUFaLFNBQWYsQ0FBbEI7QUFBK0Q7O0FBQzNFLFdBQUssTUFBTDtBQUFhVCxRQUFBQSxlQUFlLEdBQUdDLG9CQUFXUyxJQUFYLENBQWdCLEVBQUMsR0FBR2hCLE9BQU8sQ0FBQ2lCO0FBQVosU0FBaEIsQ0FBbEI7QUFBaUU7O0FBQzlFLFdBQUssWUFBTDtBQUFtQlgsUUFBQUEsZUFBZSxHQUFHQyxvQkFBV1csVUFBWCxDQUFzQjtBQUFDQyxVQUFBQSxRQUFRLEVBQUUsS0FBWDtBQUFrQixhQUFHbkIsT0FBTyxDQUFDb0I7QUFBN0IsU0FBdEIsQ0FBbEI7QUFBOEY7O0FBQ2pILFdBQUssTUFBTDtBQUFhZCxRQUFBQSxlQUFlLEdBQUdDLG9CQUFXQyxJQUFYLENBQWdCLEVBQUUsR0FBR1IsT0FBTyxDQUFDUztBQUFiLFNBQWhCLENBQWxCO0FBQWlFO0FBSmhGO0FBTUQsR0FSRCxNQVFPO0FBQ0w7QUFDQTtBQUNBLFlBQU9DLFdBQVA7QUFDRSxXQUFLLFlBQUw7QUFBbUJKLFFBQUFBLGVBQWUsR0FBR0Msb0JBQVdPLEdBQVgsQ0FBZSxFQUFDLEdBQUdkLE9BQU8sQ0FBQ2U7QUFBWixTQUFmLENBQWxCO0FBQStEOztBQUNsRixXQUFLLFdBQUw7QUFBa0JULFFBQUFBLGVBQWUsR0FBR0Msb0JBQVdTLElBQVgsQ0FBZ0IsRUFBQyxHQUFHaEIsT0FBTyxDQUFDaUI7QUFBWixTQUFoQixDQUFsQjtBQUFpRTs7QUFDbkYsV0FBSyxtQ0FBTDtBQUEwQ1gsUUFBQUEsZUFBZSxHQUFHQyxvQkFBV1csVUFBWCxDQUFzQjtBQUFDQyxVQUFBQSxRQUFRLEVBQUUsS0FBWDtBQUFrQixhQUFHbkIsT0FBTyxDQUFDb0I7QUFBN0IsU0FBdEIsQ0FBbEI7QUFBOEY7QUFIMUk7QUFLRDs7QUFFRGQsRUFBQUEsZUFBZSxDQUFDTCxHQUFELEVBQU1DLEdBQU4sRUFBVyxZQUFZO0FBQ3BDLFVBQU1tQixNQUFNLEdBQUdqQixNQUFNLENBQUNDLFNBQUQsQ0FBckI7O0FBQ0EsUUFBSSxPQUFPZ0IsTUFBUCxLQUFrQixVQUF0QixFQUFrQztBQUNoQyxZQUFNQyxNQUFNLEdBQUcsQ0FBQ2pCLFNBQVMsQ0FBQ2tCLE9BQVYsQ0FBa0IsR0FBbEIsQ0FBRCxHQUEwQixHQUExQixHQUFnQyxFQUEvQztBQUNBdEIsTUFBQUEsR0FBRyxDQUFDdUIsTUFBSixHQUFhLHNCQUFVO0FBQUVDLFFBQUFBLFNBQVMsRUFBRSxLQUFiO0FBQW9CQyxRQUFBQSxNQUFNLEVBQUUsS0FBNUI7QUFBbUNDLFFBQUFBLEdBQUcsRUFBRTtBQUF4QyxPQUFWLEVBQTJEdEIsU0FBUyxDQUFDdUIsS0FBVixDQUFnQixJQUFJQyxNQUFKLENBQVdQLE1BQVgsQ0FBaEIsRUFBb0MsQ0FBcEMsQ0FBM0QsRUFBbUdRLGFBQUlDLEtBQUosQ0FBVTlCLEdBQUcsQ0FBQytCLEdBQWQsRUFBbUJDLFFBQXRILENBQWI7QUFDQVosTUFBQUEsTUFBTSxDQUFDcEIsR0FBRCxFQUFNQyxHQUFOLEVBQVdDLElBQVgsQ0FBTjtBQUNELEtBSkQsTUFJTztBQUNMRCxNQUFBQSxHQUFHLENBQUNNLElBQUosQ0FBU2EsTUFBVDtBQUNEO0FBQ0YsR0FUYyxDQUFmO0FBVUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVVJMIGZyb20gJ3VybCc7XG5pbXBvcnQgYm9keVBhcnNlciBmcm9tICdib2R5LXBhcnNlcic7XG5pbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBNb2NrZXJPcHRpb24sIE1vY2tlclByb3h5Um91dGUgfSBmcm9tICcuJztcbmltcG9ydCB7IHBhdGhNYXRjaCB9IGZyb20gJy4vdXRpbHMnO1xuXG50eXBlIE1vY2tlckhhbmRsZU9wdGlvbnMgPSB7XG4gIHJlcTogUmVxdWVzdDtcbiAgcmVzOiBSZXNwb25zZTtcbiAgbmV4dDogTmV4dEZ1bmN0aW9uO1xuICBvcHRpb25zOiBNb2NrZXJPcHRpb247XG4gIG1vY2tlcjogTW9ja2VyUHJveHlSb3V0ZTtcbiAgbW9ja2VyS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrZXJIYW5kbGUocGFyYW06IE1vY2tlckhhbmRsZU9wdGlvbnMpIHtcbiAgY29uc3QgeyBvcHRpb25zID0ge30sIHJlcSwgcmVzLCBuZXh0LCBtb2NrZXIsIG1vY2tlcktleSB9ID0gcGFyYW0gfHwge307XG4gIGxldCBib2R5UGFyc2VyTWV0aGQgPSBib2R5UGFyc2VyLmpzb24oeyAuLi5vcHRpb25zLmJvZHlQYXJzZXJKU09OIH0pOyAvLyDpu5jorqTkvb/nlKhqc29u6Kej5p6QXG4gIC8qKlxuICAgKiBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04YCA9PiBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYFxuICAgKiBJc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvbW9ja2VyLWFwaS9pc3N1ZXMvNTBcbiAgICovXG4gIGxldCBjb250ZW50VHlwZSA9IHJlcS5nZXQoJ0NvbnRlbnQtVHlwZScpO1xuICBjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLnJlcGxhY2UoLzsuKiQvLCAnJyk7XG4gIGlmKG9wdGlvbnMuYm9keVBhcnNlckNvbmYgJiYgb3B0aW9ucy5ib2R5UGFyc2VyQ29uZltjb250ZW50VHlwZV0pIHtcbiAgICAvLyDlpoLmnpzlrZjlnKhvcHRpb25zLmJvZHlQYXJzZXJDb25m6YWN572uIHsndGV4dC9wbGFpbic6ICd0ZXh0JywndGV4dC9odG1sJzogJ3RleHQnfVxuICAgIHN3aXRjaChvcHRpb25zLmJvZHlQYXJzZXJDb25mW2NvbnRlbnRUeXBlXSl7Ly8g6I635Y+WYm9keVBhcnNlcueahOaWueazlVxuICAgICAgY2FzZSAncmF3JzogYm9keVBhcnNlck1ldGhkID0gYm9keVBhcnNlci5yYXcoey4uLm9wdGlvbnMuYm9keVBhcnNlclJhdyB9KTsgYnJlYWs7XG4gICAgICBjYXNlICd0ZXh0JzogYm9keVBhcnNlck1ldGhkID0gYm9keVBhcnNlci50ZXh0KHsuLi5vcHRpb25zLmJvZHlQYXJzZXJUZXh0IH0pOyBicmVhaztcbiAgICAgIGNhc2UgJ3VybGVuY29kZWQnOiBib2R5UGFyc2VyTWV0aGQgPSBib2R5UGFyc2VyLnVybGVuY29kZWQoe2V4dGVuZGVkOiBmYWxzZSwgLi4ub3B0aW9ucy5ib2R5UGFyc2VyVXJsZW5jb2RlZCB9KTsgYnJlYWs7XG4gICAgICBjYXNlICdqc29uJzogYm9keVBhcnNlck1ldGhkID0gYm9keVBhcnNlci5qc29uKHsgLi4ub3B0aW9ucy5ib2R5UGFyc2VySlNPTiB9KTsvL+S9v+eUqGpzb27op6PmnpAgYnJlYWs7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIOWFvOWuueWOn+adpeeahOS7o+eggSzpu5jorqTop6PmnpBcbiAgICAvLyBDb21wYXRpYmxlIHdpdGggdGhlIG9yaWdpbmFsIGNvZGUsIGRlZmF1bHQgcGFyc2luZ1xuICAgIHN3aXRjaChjb250ZW50VHlwZSl7XG4gICAgICBjYXNlICd0ZXh0L3BsYWluJzogYm9keVBhcnNlck1ldGhkID0gYm9keVBhcnNlci5yYXcoey4uLm9wdGlvbnMuYm9keVBhcnNlclJhdyB9KTsgYnJlYWs7XG4gICAgICBjYXNlICd0ZXh0L2h0bWwnOiBib2R5UGFyc2VyTWV0aGQgPSBib2R5UGFyc2VyLnRleHQoey4uLm9wdGlvbnMuYm9keVBhcnNlclRleHQgfSk7IGJyZWFrO1xuICAgICAgY2FzZSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogYm9keVBhcnNlck1ldGhkID0gYm9keVBhcnNlci51cmxlbmNvZGVkKHtleHRlbmRlZDogZmFsc2UsIC4uLm9wdGlvbnMuYm9keVBhcnNlclVybGVuY29kZWQgfSk7IGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGJvZHlQYXJzZXJNZXRoZChyZXEsIHJlcywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG1vY2tlclttb2NrZXJLZXldO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCByZ3hTdHIgPSB+bW9ja2VyS2V5LmluZGV4T2YoJyAnKSA/ICcgJyA6ICcnO1xuICAgICAgcmVxLnBhcmFtcyA9IHBhdGhNYXRjaCh7IHNlbnNpdGl2ZTogZmFsc2UsIHN0cmljdDogZmFsc2UsIGVuZDogZmFsc2UgfSkobW9ja2VyS2V5LnNwbGl0KG5ldyBSZWdFeHAocmd4U3RyKSlbMV0pKFVSTC5wYXJzZShyZXEudXJsKS5wYXRobmFtZSk7XG4gICAgICByZXN1bHQocmVxLCByZXMsIG5leHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMuanNvbihyZXN1bHQpO1xuICAgIH1cbiAgfSk7XG59Il19