Skip to content

Instantly share code, notes, and snippets.

@undoZen
Created January 27, 2014 08:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save undoZen/8644903 to your computer and use it in GitHub Desktop.
Save undoZen/8644903 to your computer and use it in GitHub Desktop.
'use strict';
var http = require('http');
var apiproxy = require('express-apiproxy');
var reqProto = require('express/lib/request');
var resProto = require('express/lib/response');
reqProto.__defineGetter__('uest', function(){
return this._uest ? this._uest : this._uest = apiproxy(this, {
agent: new http.Agent({ maxSockets: 2 })
});
});
reqProto.qGet = function (url) {
var d = Q.defer();
this.uest({
uri: app.prependHost(url),
json: true
}, function (err, r, b) {
d.resolve(err || b);
});
return d.promise;
}
reqProto.qOpts = function (key, all) {
return this.qGet('/options/byKey?key=' + key + (all ? '&all=true' : ''));
}
reqProto.spread = function (fn) {
var d = this._data || Q.all([]);
d.spread(fn).then(function () {}, this.next);
}
// rewrite res.render function to add default template locals
resProto.render = function(view, options, fn){
var self = this
, options = options || {}
, req = this.req
, app = req.app;
// support callback function as second arg
if ('function' == typeof options) {
fn = options, options = {};
}
// merge res.locals
options._locals = self.locals;
/* custom options started here */
var user = options.user = _.clone(req.user);
if ('object' == typeof user) {
//user.avatar = user.avatar || '/static/images/avatar.png';
user.avatar = user.avatar
? config.url.upyun + '/' + user.avatar + '-t'
: '/static/images/avatar.jpg';
user.completeness = lib.user.completeness(user);
user.displayName = lib.user.displayName(user);
user.displayTitle = lib.user.displayTitle(user);
}
_.extend(options, _.pick(GLOBAL, 'css js lib moment mmd mmdt mmfn mmfnh'.split(' ')));
_.extend(options, _.pick(config, 'usageType'.split(' ')));
/* ends here */
// default callback to respond
fn = fn || function(err, str){
if (err) return req.next(err);
self.send(str);
};
// render
if ('object' == typeof user) {
self.req.qGet('/mails/countUnread?receiverId='+req.user.id)
.then(function (count) {
user.unreadMessages = count;
app.render(view, options, fn);
});
}
else app.render(view, options, fn);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment