@yhiot/utils
Version:
210 lines (164 loc) • 7.03 kB
JavaScript
;
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;
}();
}