UNPKG

@yhiot/utils

Version:
210 lines (164 loc) 7.03 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.preRestfulCreator = preRestfulCreator; exports.postRestfulCreator = postRestfulCreator; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _Errcode = _interopRequireWildcard(require("../Errcode")); var _dbcached = require("@yhiot/dbcached"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /** * Koa-Router的中间件,预处理restful-url的参数. * 处理如下格式URL: // router.get('/user', getUsers); // router.get('/user/:_id', getUser); // router.put('/user/:_id', updateUser); // router.delete('/user/:_id', removeUser); // router.post('/user', createUser); * GET类型分两种: + 有_id的表示获取单个 + 无_id表示查询多个 * PUT类型只有一种: 更新单个 * POST类型只有一种: 创建单个 * DELETE类型只有一种: 删除单个 */ function preRestfulCreator(prefix) { if (!prefix) prefix = ''; return /*#__PURE__*/function () { var _preRestful = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ctx, next) { var path, subpath, fields, method, _id, qstr, options, args, _id2, _args, _id3; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: path = ctx.path; if (path.startsWith(prefix)) { _context.next = 5; break; } _context.next = 4; return next(); case 4: return _context.abrupt("return", _context.sent); case 5: subpath = path.substring(prefix.length); fields = subpath.split('/') || []; method = ctx.method; _context.t0 = method; _context.next = _context.t0 === 'GET' ? 11 : _context.t0 === 'POST' ? 20 : _context.t0 === 'PUT' ? 26 : _context.t0 === 'DELETE' ? 36 : 42; break; case 11: _id = fields[1]; qstr = ctx.request.querystring; if (qstr) { qstr = decodeURIComponent(qstr); } if (qstr && qstr.startsWith('?')) { qstr = qstr.substr(1); } options = (0, _dbcached.memParse)(qstr); if (!_id) { // 无_id表示查列表 ctx.state._type = 'retrieve'; } else { ctx.state._type = 'get'; } ctx.state._id = _id; ctx.state._options = options; return _context.abrupt("break", 44); case 20: args = ctx.request.body; if (args) { _context.next = 23; break; } throw new _Errcode.default('error! args is null', _Errcode.EC.ERR_PARAM_ERROR); case 23: ctx.state._type = 'create'; ctx.state._args = args; return _context.abrupt("break", 44); case 26: _id2 = fields[1]; _args = ctx.request.body; if (_id2) { _context.next = 30; break; } throw new _Errcode.default('error! _id is null', _Errcode.EC.ERR_PARAM_ERROR); case 30: if (_args) { _context.next = 32; break; } throw new _Errcode.default('error! args is null', _Errcode.EC.ERR_PARAM_ERROR); case 32: ctx.state._type = 'update'; ctx.state._id = _id2; ctx.state._args = _args; return _context.abrupt("break", 44); case 36: _id3 = fields[1]; if (_id3) { _context.next = 39; break; } throw new _Errcode.default('error! _id is null', _Errcode.EC.ERR_PARAM_ERROR); case 39: ctx.state._type = 'remove'; ctx.state._id = _id3; return _context.abrupt("break", 44); case 42: ctx.state._type = 'none'; return _context.abrupt("break", 44); case 44: _context.next = 46; return next(); case 46: return _context.abrupt("return", _context.sent); case 47: case "end": return _context.stop(); } } }, _callee); })); function preRestful(_x, _x2) { return _preRestful.apply(this, arguments); } return preRestful; }(); } function postRestfulCreator(restfulFunction) { return /*#__PURE__*/function () { var _restfulResult = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(ctx) { var result; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return restfulFunction(ctx.state); case 2: result = _context2.sent; ctx.body = { errcode: 0, result: result }; case 4: case "end": return _context2.stop(); } } }, _callee2); })); function restfulResult(_x3) { return _restfulResult.apply(this, arguments); } return restfulResult; }(); }