koa-quick-service
Version:
start koa service quickly
672 lines (584 loc) • 30.3 kB
JavaScript
/**
* Created by evio on 16/8/31.
*/
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var redis = require("redis");
// const bluebird = require('bluebird');
// bluebird.promisifyAll(redis.RedisClient.prototype);
// bluebird.promisifyAll(redis.Multi.prototype);
var Redis = function () {
function Redis(options) {
(0, _classCallCheck3.default)(this, Redis);
this.options = options;
this.options.detect_buffers = true;
this.transaction = false;
this.transacte = null;
this.transactions = [];
}
(0, _createClass3.default)(Redis, [{
key: 'begin',
value: function begin() {
if (this.transactions.length) {
throw new Error('you should exec transations first.');
}
this.transaction = true;
this.transacte = this.connector.multi();
}
}, {
key: 'clear',
value: function clear() {
this.transaction = false;
this.transacte = null;
this.transactions = [];
}
}, {
key: 'commit',
value: function commit() {
var _this = this;
return new _promise2.default(function (resolve, reject) {
_this.transacte.exec(function (err, replies) {
if (err) return reject(err);
_this.clear();
resolve(replies);
});
});
}
}, {
key: 'rollback',
value: function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
var err, i;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
err = void 0;
_context.prev = 1;
i = 0;
case 3:
if (!(i < this.transactions.length)) {
_context.next = 9;
break;
}
_context.next = 6;
return this.transactions[i].call(this);
case 6:
i++;
_context.next = 3;
break;
case 9:
_context.next = 14;
break;
case 11:
_context.prev = 11;
_context.t0 = _context['catch'](1);
err = _context.t0;
case 14:
this.clear();
return _context.abrupt('return', err);
case 16:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[1, 11]]);
}));
function rollback() {
return _ref.apply(this, arguments);
}
return rollback;
}()
}, {
key: 'connect',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
var _this2 = this;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return new _promise2.default(function (resolve, reject) {
var client = redis.createClient(_this2.options);
client.once("error", function (err) {
return reject(err);
});
client.once('ready', function () {
return resolve(_this2.connector = client);
});
});
case 2:
return _context2.abrupt('return', this);
case 3:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
function connect() {
return _ref2.apply(this, arguments);
}
return connect;
}()
}, {
key: 'hgetall',
value: function hgetall(id) {
var _this3 = this;
return new _promise2.default(function (resolve, reject) {
_this3.connector.hgetall(id, function (err, obj) {
if (err) return reject(err);
resolve(obj);
});
});
}
}, {
key: 'hmset',
value: function hmset(id, json) {
var _this4 = this;
if (this.transaction) {
this.transacte.HMSET(id, json, function () {
_this4.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3() {
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return _this4.exists(id);
case 2:
if (!_context3.sent) {
_context3.next = 5;
break;
}
_context3.next = 5;
return new _promise2.default(function (resolve, reject) {
_this4.connector.del(id, function (err, replies) {
if (err) return reject(err);
resolve(replies);
});
});
case 5:
case 'end':
return _context3.stop();
}
}
}, _callee3, _this4);
})));
});
} else {
return new _promise2.default(function (resolve, reject) {
_this4.connector.HMSET(id, json, function (err, replies) {
if (err) return reject(err);
resolve(replies);
});
});
}
}
}, {
key: 'get',
value: function get(id) {
var _this5 = this;
return new _promise2.default(function (resolve, reject) {
_this5.connector.get(id, function (err, value) {
if (err) return reject(err);
resolve(value);
});
});
}
}, {
key: 'set',
value: function set(id, value) {
var _this6 = this;
if (this.transaction) {
this.transacte.set(id, value, function () {
_this6.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4() {
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_context4.next = 2;
return _this6.exists(id);
case 2:
if (!_context4.sent) {
_context4.next = 5;
break;
}
_context4.next = 5;
return new _promise2.default(function (resolve, reject) {
_this6.connector.del(id, function (err, replies) {
if (err) return reject(err);
resolve(replies);
});
});
case 5:
case 'end':
return _context4.stop();
}
}
}, _callee4, _this6);
})));
});
} else {
return new _promise2.default(function (resolve, reject) {
_this6.connector.set(id, value, function (err, replies) {
if (err) return reject(err);
resolve(replies);
});
});
}
}
}, {
key: 'del',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8(id) {
var _this7 = this;
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
_context8.next = 2;
return this.exists(id);
case 2:
if (!_context8.sent) {
_context8.next = 9;
break;
}
if (!this.transaction) {
_context8.next = 7;
break;
}
return _context8.delegateYield(_regenerator2.default.mark(function _callee7() {
var data;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
data = void 0;
_context7.prev = 1;
_context7.next = 4;
return _this7.get(id);
case 4:
data = _context7.sent;
_this7.transacte.del(id, function () {
_this7.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5() {
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_context5.next = 2;
return new _promise2.default(function (resolve, reject) {
_this7.connector.set(id, data, function (err, obj) {
if (err) return reject(err);
resolve(obj);
});
});
case 2:
case 'end':
return _context5.stop();
}
}
}, _callee5, _this7);
})));
});
_context7.next = 14;
break;
case 8:
_context7.prev = 8;
_context7.t0 = _context7['catch'](1);
_context7.next = 12;
return _this7.hgetall(id);
case 12:
data = _context7.sent;
_this7.transacte.del(id, function () {
_this7.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6() {
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
_context6.next = 2;
return new _promise2.default(function (resolve, reject) {
_this7.connector.HMSET(id, data, function (err, obj) {
if (err) return reject(err);
resolve(obj);
});
});
case 2:
case 'end':
return _context6.stop();
}
}
}, _callee6, _this7);
})));
});
case 14:
case 'end':
return _context7.stop();
}
}
}, _callee7, _this7, [[1, 8]]);
})(), 't0', 5);
case 5:
_context8.next = 9;
break;
case 7:
_context8.next = 9;
return new _promise2.default(function (resolve, reject) {
_this7.connector.del(id, function (err, obj) {
if (err) return reject(err);
resolve(obj);
});
});
case 9:
case 'end':
return _context8.stop();
}
}
}, _callee8, this);
}));
function del(_x) {
return _ref5.apply(this, arguments);
}
return del;
}()
}, {
key: 'hdel',
value: function () {
var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11(id, key) {
var _this8 = this;
return _regenerator2.default.wrap(function _callee11$(_context11) {
while (1) {
switch (_context11.prev = _context11.next) {
case 0:
if (!this.transaction) {
_context11.next = 4;
break;
}
return _context11.delegateYield(_regenerator2.default.mark(function _callee10() {
var data;
return _regenerator2.default.wrap(function _callee10$(_context10) {
while (1) {
switch (_context10.prev = _context10.next) {
case 0:
_context10.next = 2;
return new _promise2.default(function (resolve, reject) {
_this8.connector.hget(id, key, function (err, value) {
if (err) return reject(err);
resolve(value);
});
});
case 2:
data = _context10.sent;
_this8.transacte.hdel(id, key, function () {
_this8.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9() {
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
_context9.next = 2;
return new _promise2.default(function (resolve, reject) {
_this8.connector.hset(id, key, data, function (err, obj) {
if (err) return reject(err);
resolve(obj);
});
});
case 2:
case 'end':
return _context9.stop();
}
}
}, _callee9, _this8);
})));
});
case 4:
case 'end':
return _context10.stop();
}
}
}, _callee10, _this8);
})(), 't0', 2);
case 2:
_context11.next = 6;
break;
case 4:
_context11.next = 6;
return new _promise2.default(function (resolve, reject) {
_this8.connector.hdel(id, key, function (err, obj) {
if (err) return reject(err);
resolve(obj);
});
});
case 6:
case 'end':
return _context11.stop();
}
}
}, _callee11, this);
}));
function hdel(_x2, _x3) {
return _ref8.apply(this, arguments);
}
return hdel;
}()
}, {
key: 'hset',
value: function hset(id, key, value) {
var _this9 = this;
if (this.transaction) {
this.transacte.hset(id, key, value, function () {
_this9.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee12() {
return _regenerator2.default.wrap(function _callee12$(_context12) {
while (1) {
switch (_context12.prev = _context12.next) {
case 0:
_context12.next = 2;
return new _promise2.default(function (resolve, reject) {
_this9.connector.hdel(id, key, function (err, obj) {
if (err) return reject(err);
resolve(obj);
});
});
case 2:
case 'end':
return _context12.stop();
}
}
}, _callee12, _this9);
})));
});
} else {
return new _promise2.default(function (resolve, reject) {
_this9.connector.hset(id, key, value, function (err, obj) {
if (err) return reject(err);
resolve(obj);
});
});
}
}
}, {
key: 'hget',
value: function hget(id, key) {
var _this10 = this;
return new _promise2.default(function (resolve, reject) {
_this10.connector.hget(id, key, function (err, obj) {
if (err) return reject(err);
resolve(obj);
});
});
}
}, {
key: 'exists',
value: function exists(id) {
var _this11 = this;
return new _promise2.default(function (resolve, reject) {
_this11.connector.exists(id, function (err, res) {
if (err) return reject(err);
resolve(res);
});
});
}
}, {
key: 'expire',
value: function expire(id, diff) {
var _this12 = this;
if (this.transaction) {
this.transacte.expire(id, diff, function () {
_this12.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee13() {
return _regenerator2.default.wrap(function _callee13$(_context13) {
while (1) {
switch (_context13.prev = _context13.next) {
case 0:
_context13.next = 2;
return new _promise2.default(function (resolve, reject) {
_this12.connector.persist(id, function (err, res) {
if (err) return reject(err);
resolve(res);
});
});
case 2:
case 'end':
return _context13.stop();
}
}
}, _callee13, _this12);
})));
});
} else {
return new _promise2.default(function (resolve, reject) {
_this12.connector.expire(id, diff, function (err, obj) {
if (err) return reject(err);
resolve(obj);
});
});
}
}
}, {
key: 'end',
value: function () {
var _ref12 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee14() {
var _this13 = this;
return _regenerator2.default.wrap(function _callee14$(_context14) {
while (1) {
switch (_context14.prev = _context14.next) {
case 0:
if (!this.transactions.length) {
_context14.next = 2;
break;
}
throw new Error('transactions need be exec.');
case 2:
_context14.next = 4;
return new _promise2.default(function (resolve, reject) {
var that = _this13;
if ((0, _typeof3.default)(_this13.connector) == 'object') {
_this13.connector.on('end', cb);
_this13.connector.quit();
} else {
reject(new Error('redis connect failed'));
}
function cb() {
that.connector.removeListener('end', cb);
that.connector = null;
resolve();
}
});
case 4:
return _context14.abrupt('return', _context14.sent);
case 5:
case 'end':
return _context14.stop();
}
}
}, _callee14, this);
}));
function end() {
return _ref12.apply(this, arguments);
}
return end;
}()
}], [{
key: 'create',
value: function create(options) {
var _redis = new Redis(options);
return _redis.connect();
}
}]);
return Redis;
}();
exports.default = Redis;
module.exports = exports['default'];