thinknode
Version:
A fast, flexible and all-in-one web framework for node.js.
163 lines (134 loc) • 5.34 kB
JavaScript
'use strict';
exports.__esModule = true;
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
*
* @author richen
* @copyright Copyright (c) 2015 - <richenlin(at)gmail.com>
* @license MIT
* @version 15/12/3
*/
var _class = function (_THINK$Base) {
(0, _inherits3.default)(_class, _THINK$Base);
function _class() {
(0, _classCallCheck3.default)(this, _class);
return (0, _possibleConstructorReturn3.default)(this, _THINK$Base.apply(this, arguments));
}
_class.prototype.init = function init() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
this.options = THINK.extend(false, {
redis_host: THINK.config('redis_host') || '127.0.0.1',
redis_port: THINK.config('redis_port') || 6379,
redis_password: THINK.config('redis_password'),
redis_db: THINK.config('redis_db') || '0',
redis_timeout: THINK.config('redis_timeout') || 10 }, options);
this.handle = null;
this.deferred = null;
};
_class.prototype.connect = function connect() {
var _this2 = this;
if (this.handle) {
return this.deferred.promise;
}
var deferred = THINK.getDefer();
var redis = require('redis');
var connection = redis.createClient({
host: this.options.redis_host,
port: this.options.redis_port,
db: this.options.redis_db,
auth_pass: this.options.redis_password
});
// if (this.options.redis_password) {
// connection.auth(this.options.redis_password, function () {
// });
// }
// if (this.options.redis_db) {
// connection.select(this.options.redis_db, function () {
// });
// }
connection.on('ready', function () {
deferred.resolve();
});
connection.on('connect', function () {
deferred.resolve();
});
connection.on('error', function (err) {
_this2.close();
deferred.reject(err);
});
connection.on('end', function () {
_this2.close();
deferred.reject('connection end');
});
this.handle = connection;
if (this.deferred) {
this.deferred.reject(new Error('connection closed'));
}
this.deferred = deferred;
return this.deferred.promise;
};
_class.prototype.close = function close() {
if (this.handle) {
this.handle.quit();
this.handle = null;
}
};
/**
*
* @param name
* @param data
*/
_class.prototype.wrap = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(name, data) {
var deferred;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
deferred = THINK.getDefer();
_context.next = 3;
return this.connect().catch(function (e) {
return deferred.reject(e);
});
case 3:
if (!THINK.isArray(data)) {
data = data === undefined ? [] : [data];
}
data.push(function (err, da) {
if (err) {
deferred.reject(err);
} else {
deferred.resolve(da);
}
});
if (this.handle) {
this.handle[name].apply(this.handle, data);
} else {
deferred.reject('connection end');
}
return _context.abrupt('return', deferred.promise);
case 7:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
function wrap(_x2, _x3) {
return _ref.apply(this, arguments);
}
return wrap;
}();
return _class;
}(THINK.Base);
exports.default = _class;