Express自身带强大的路由功能,这让我们可以详细拆分项目的需求,设计出优美的restful风格对外API。为了方便实现上述功能,我加入了页面控制器及脚本自动加载设计:
比如针对会员模块,我们在app.js中指定了模块的路由文件
app.use('/member', require('./routes/member'));
首先:针对POST和GET方法,分别定义如下路由规则:
router.get('/register', function(request, response, next)
{
var action = express.autoload('action_member_register');
action.handleGet(request, response, next);
});
router.post('/register', function(request, response, next)
{
var action = express.autoload('action_member_register');
action.handlePost(request, response, next);
});
这里的express.autoload就是我们临时加入一个自动加载机制,用于自动映射/scripts/action/member/register.js这个页面控制器,具体代码也非常简单:
express.autoload = function(path){return require('./scripts/'+path.replace(/_/g,'/'));};
其次:实现页面控制器基类,并在其中集成页面助手
var action = function(){};
module.exports = new action();
action.prototype.isempty = function(elem)
{
return (elem === null || elem === undefined || elem === '');
};
最后:基于基类实现具体页面控制器即可
var action = express.inherit('flap_core_action');
module.exports = action;
action.handlePost = function(request, response, next){};
这里的express.inherit就是我们实现的自动继承,实现如下:
express.inherit = function(path){return Object.create(express.autoload(path));};
如果不想自己写,也可以使用框架自带的util.inherit来实现。
测试:
如果担心写出错,运行时大量创建临时对象,我们可以在新加入的自动加载脚本中加上测试代码,使用autocannon测试下。