UNPKG

@booxood/mocker-api

Version:

This is dev support mock RESTful API.

103 lines (85 loc) 9.56 kB
"use strict"; 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