UNPKG

zeanium-node

Version:

Zeanium for Node.js, simple http server and custome your business.

102 lines (93 loc) 3.77 kB
/** * Created by yangyxu on 8/20/14. */ zn.define([ 'node:url' ],function (node_url) { return zn.Class({ properties: { applicationContext: { get: function (){ return this._applicationContext; }, set: function (value){ this._applicationContext = value; } }, size: { get: function (){ return this._handlers.length; } } }, methods: { init: function (context){ this._handlers = []; }, push: function (handler){ if(!this._applicationContext){ this._applicationContext = handler.appContext; } return this._handlers.push(handler), this; }, next: function (request, response){ try { var _request = request || this._request; var _response = response || this._response; var _handler = this._handlers.shift(); if(!_handler){ return; } this._request = _request; this._response = _response; zn.extend(request._$get, _handler.pathArgv||{}); var _controller = _handler.controller, _action = _handler.action, _meta = _controller.member(_action).meta||{}, _values = this.__checkMeta(_meta, request, response); this._response.setTimeout(_meta.timeout); if(!_values){ return false; } if(!!_handler.validate){ if(!_request.session.hasItem()){ return response.sessionTimeout('Session is invalid. Please login into system first.'); } var _ary = [], _validate = _handler.validate; if(zn.is(_validate, 'string')){ _ary.push(_validate); } if(zn.is(_validate, 'array')){ _ary = _validate; } for(var i=0, _len = _ary.length; i < _len; i++){ if(!_request.session.getItem(_ary[i])){ return response.sessionTimeout('Session [' + _ary[i] + '] is invalid.'); } } } zn._request = _request; zn._response = _response; _controller[_action].call(_controller, request, response, this); } catch (e) { zn.error('RequestHandlerChain doRequest line 45 Error: ' + e.message); console.log(e.stack); response.error(e.message); } }, __checkMeta: function (_meta, request, response){ if(_meta){ var _requestMethod = request.method, _method = _meta.method || 'GET&POST', _argv = _meta.argv || {}; if(_method.indexOf(_requestMethod) === -1){ return response.forword('__zn__/error/__405'), false; } return request.checkArgs(_argv, response); } return request.checkArgs({}, response); } } }); });