UNPKG

ligle-midware

Version:
145 lines (141 loc) 3.87 kB
var index = require('./index.js'); var ligle={}; ligle.util=require('ligle-util')(); var logger = index.logger; var Class = ligle.util.Class; // 功能类定义: // 渲染器 var Renderer = Class.extend({ __classname:'Renderer', init:function(req,res){ this.res=res; this.req=req; }, /** * 普通渲染,跟res.render一致 * * @method * @param {string} file 模板文件 * @param {obj} obj 渲染对象 * @return {null} */ render:function(file,obj){ obj = this._wrap(obj); this.res.render(file, obj); }, /** * 便利的渲染方法。 * * 如果传入失败对象:渲染err对象被包装到obj.error中,渲染。 * 如果没有传入失败对象:则正常渲染obj。 * 注:模板文件可以传入一个或两个。如果两个,则第一个为成功模板,第二个为失败模板 * @method * @param {string} file1 失败模板文件 * @param {string} [file2=file1] 成功模板文件 * @param {obj} err 失败信息对象 * @param {obj} obj 渲染对象 * @return {null} */ renderEO:function(){// jshint ignore:line var fileSucc, fileErr,err,obj; if(arguments.length===3){ fileErr = fileSucc = arguments[0]; }else if(arguments.length===4){ fileErr = arguments[0]; fileSucc = arguments[1]; }else{ logger.error('renderEO argument number error: ',arguments.length); } err = arguments[arguments.length-2]; obj = arguments[arguments.length-1]; //logger.debug(arguments); obj = obj || {}; if(err instanceof Error){ obj.error=JSON.stringify(err.message); }else if(err){ obj.error=JSON.stringify(err); } obj = this._wrap(obj); if(err){ return this.res.render(fileErr, obj); }else { return this.res.render(fileSucc, obj); } }, /** * 传入错误信息,并回退。 * * @method * @param {string} msg 错误信息 * @param {bool} ajax 如果为真,则只发送json错误对象。 * @return {null} */ errorBack:function(msg,ajax){ msg = JSON.stringify(msg); if(!ajax){ this.req.flash('error', msg); this.res.redirect('back'); return; }else{ this.res.status(403).json({error:msg}); return; } }, /** * 传入成功信息,并回退。 * * @method * @param {string} msg 成功信息 * @param {bool} ajax 如果为真,则只发送json错误对象。 * @return {null} */ successBack:function(msg,ajax){ msg = JSON.stringify(msg); if(!ajax){ this.req.flash('success', msg); this.res.redirect('back'); return; }else{ this.res.status(200).json({success:msg}); return; } }, // 非ajax则渲染页面,ajax则返回成功204。 successRender:function(file,obj,ajax){ if(ajax){ this.res.sendStatus(204); return; }else{ this.render(file,obj); } }, errorRender:function(file,obj,ajax){ var o = {error:obj}; if(ajax){ this.res.status(403).json(o); return; }else{ this.render(file,o); } }, _wrap:function(obj){ obj = obj || {}; // 这里统一名字,以前的succ,err去掉。方便扩展性,如果以后支持多个 // flash的词,这里可以很好的扩展。 this.success = this.req.flash('success').toString(); this.error = this.req.flash('error').toString(); this.user = this.req.session.user; this.status = this.req.session.status; this.group = this.req.session.group; this._objField(obj,'success'); this._objField(obj,'error'); this._objField(obj,'user'); this._objField(obj,'status'); this._objField(obj,'group'); return obj; }, _objField:function(obj,fieldname){ obj[fieldname] = (obj[fieldname] || this[fieldname]) || ''; }, }); module.exports = Renderer;