thinknode
Version:
A fast, flexible and all-in-one web framework for node.js.
207 lines (150 loc) • 7.16 kB
JavaScript
'use strict';
exports.__esModule = true;
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
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);
var _Cache = require('../Cache/Cache');
var _Cache2 = _interopRequireDefault(_Cache);
var _RedisSocket = require('../Socket/RedisSocket');
var _RedisSocket2 = _interopRequireDefault(_RedisSocket);
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/29
*/
var _class = function (_cache) {
(0, _inherits3.default)(_class, _cache);
function _class() {
(0, _classCallCheck3.default)(this, _class);
return (0, _possibleConstructorReturn3.default)(this, _cache.apply(this, arguments));
}
_class.prototype.init = function init(options) {
this.keyName = options.cache_key_prefix;
_cache.prototype.init.call(this, options);
this.options.cache_key_prefix = (~THINK.config('cache_key_prefix').indexOf(':') ? THINK.config('cache_key_prefix') : THINK.config('cache_key_prefix') + ':') + 'Session:';
var key = THINK.hash(this.options.redis_host + '_' + this.options.redis_port + '_' + this.options.redis_db);
if (!(key in THINK_CACHES.INSTANCES.CACHE)) {
THINK_CACHES.INSTANCES.CACHE[key] = new _RedisSocket2.default(this.options);
}
this.handle = THINK_CACHES.INSTANCES.CACHE[key];
};
/**
*
* @param name
*/
_class.prototype.get = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(name) {
var data;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return this.handle.wrap('get', [this.options.cache_key_prefix + this.keyName]);
case 2:
data = _context.sent;
if (data) {
_context.next = 5;
break;
}
return _context.abrupt('return', '');
case 5:
_context.prev = 5;
data = JSON.parse(data);
if (!(data.expire && Date.now() > data.expire)) {
_context.next = 12;
break;
}
this.handle.wrap('del', [this.options.cache_key_prefix + this.keyName]);
return _context.abrupt('return', '');
case 12:
return _context.abrupt('return', data[name]);
case 13:
_context.next = 19;
break;
case 15:
_context.prev = 15;
_context.t0 = _context['catch'](5);
this.handle.wrap('del', [this.options.cache_key_prefix + this.keyName]);
return _context.abrupt('return', '');
case 19:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[5, 15]]);
}));
function get(_x) {
return _ref.apply(this, arguments);
}
return get;
}();
/**
*
* @param name
* @param value
* @param timeout
*/
_class.prototype.set = function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(name, value) {
var _content;
var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.options.cache_timeout;
var rdata, content, setP;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return this.handle.wrap('get', [this.options.cache_key_prefix + this.keyName]);
case 2:
rdata = _context2.sent;
content = (_content = {}, _content[name] = value, _content.expire = Date.now() + timeout * 1000, _content.timeout = timeout, _content);
_context2.prev = 4;
if (!THINK.isEmpty(rdata)) {
rdata = JSON.parse(rdata);
content = THINK.extend(false, rdata, content);
}
setP = [this.handle.wrap('set', [this.options.cache_key_prefix + this.keyName, (0, _stringify2.default)(content)])];
if (typeof timeout === 'number') {
setP.push(this.handle.wrap('expire', [this.options.cache_key_prefix + this.keyName, timeout]));
}
return _context2.abrupt('return', _promise2.default.all(setP));
case 11:
_context2.prev = 11;
_context2.t0 = _context2['catch'](4);
return _context2.abrupt('return', _promise2.default.resolve());
case 14:
case 'end':
return _context2.stop();
}
}
}, _callee2, this, [[4, 11]]);
}));
function set(_x2, _x3) {
return _ref2.apply(this, arguments);
}
return set;
}();
/**
*
*/
_class.prototype.rm = function rm() {
return this.handle.wrap('del', [this.options.cache_key_prefix + this.keyName]);
};
return _class;
}(_Cache2.default);
exports.default = _class;