Express session 模块的扩展
2013-05-25 20:18 straybird 阅读(440) 评论(0) 编辑 收藏 举报session 数据的处理是很敏感的,在每个请求的处理逻辑块中直接调用 req.session 显得很不规范,所以需要一个模块来单独管理session的读写。
再考虑不能为每个用户的session添加读写function,因为这样会导致性能损耗,所以必须对session对象做一个基类扩展。
在无法显式知道session 构造函数的情况下只能使用 constructor 关键字,进而获取其 prototype 属性,实现原型继承。
session.js
var sessionConstructed = false; exports.get = function (req) { var session = req.session; if (!sessionConstructed) { var cst = session.constructor; cst.prototype.userInfo = function () { return this.user; }; cst.prototype.initUser = function (username, source) { this.user = { username: username, source: source }; }; cst.prototype.clearUser = function () { this.user = null; }; cst.prototype.checkVerifyCode = function (code) { if (!this._verifyCode || this._verifyCode != code.toLowerCase()) { this._verifyCode = null; return false } else { return true; } } cst.prototype.setVerifyCode = function (code) { this._verifyCode = code.toLowerCase(); } sessionConstructed = true; } return session; }
howToUse.js
var session = require('./session.js') function onSomeRequst(req, res){ var ses = session.get(req); var userInfo = session.get(req).userInfo(); var verifyCode = '1234'; var isVerifyCodeRight = session.checkVerifyCode(verifyCode); }