UNPKG

node-framework

Version:

node-framework

104 lines (76 loc) 2.35 kB
/** * @file baseController.js * @author sekiyika (px.pengxing@gmail.com) * @description * */ var util = require('util'); var events = require('events'); function BaseController(app, req, res, next) { events.EventEmitter.call(this); this.app = app; this.req = req; this.res = res; this.next = next; this.isEnded = false; } util.inherits(BaseController, events.EventEmitter); BaseController.prototype.exec = function () { this.app.logger.dProfile(this.constructor.name + ':process - ' + this.req.pvid); var me = this; var route = this.req.route || {}; var options = route.options || {}; // clone middlewares var middlewares = options.middlewares ? options.middlewares.slice(0) : []; var req = me.req; var res = me.res; var app = this.app; // 保存controller队列 if (req.controllers && req.controllers.length) { var prevController = req.controllers[req.controllers.length - 1]; // 如果前面的controller没有结束,则结束之前的controller if (!prevController.isEnded) { prevController.destroy(); } req.controllers.push(this); // 记录一次controller的transfer app.emit('controller:transfer', req.controller, me); } else { req.controllers = [ this ]; } req.controller = this; req.next = me.next; res.next = me.next; app.emit('request:processing', this); middlewares.push(function () { me._exec(me.req, me.res, function () { // 执行connect的最后一个next方法 me.next(); }); }); // 处理middleware,让middleware串行执行 function invokeMiddlewares(index) { if (!middlewares[index]) { return; } function _next() { invokeMiddlewares(++index); } var middleware = middlewares[index]; middleware.call(me, me.req, me.res, _next); } invokeMiddlewares(0); }; BaseController.prototype._exec = function () { }; /** * Destroy */ BaseController.prototype.destroy = function () { this.isEnded = true; this.app.logger.dProfile(this.constructor.name + ':process - ' + this.req.pvid); }; BaseController.prototype.throwException = function (err) { // TODO }; module.exports = BaseController;