rrestjs框架更简洁的api

2012-10-12 07:28

rrestjs框架更简洁的api

by snoopyxdy

at 2012-10-11 23:28:20

original http://snoopyxdy.blog.163.com/blog/static/601174402012911112350717

之前@d4rkl0rd 同学写了一篇rrestjs框架的文章:
《我与rrestjs的相遇,是惊喜,是开始》
让我很欣慰啊,虽然现在用rrestjs开发项目的TX不多,但是还是有那些愿意尝试并不断给我意见的朋友,衷心的感谢他们。比如@a272121742就给了我很多api方面的修改意见。

最近发布了rrestjsv0.9版本,增加一些功能和修复了bug,从而使api也更加简洁,想从另外一个方面让大家对node.js有个认识,除了expressjs,还有rrestjs轻量级框架可供选择啊。

我们先来看下一个简单的hello world服务器的代码.

var http = require('http'),
rrest = require('rrestjs'),
server = http.createServer(function(req, res){//完全原生的node.js手册代码风格,没有学习门槛
        res.send('hello world everyone!'); //rrestjs封装了一个res.send方法,用来响应请求
}).listen(3000);

大家可以看到上述代码,只不过多了一行require('rrestjs'),而其他完全与node.js官网的示例一模一样,这也是rrestjs称作轻量级的原因,完全没有侵入您的代码。

node.js可以充分的利用cpu个数,来启动cluster。利用rrestjs框架您只需要在config配置文件中设置如下,即可轻松开启多个进程,并且进程间会由rrestjs自动完成心跳和内存监控,一旦发现异常将自动重启子进程。

isCluster:false, //是否开启多进程集群
ClusterNum:4, //开启的进程数

您的服务器代码,就是上述hello world代码无需任何改动。只需要在前面加上一行载入配置文件即可:

module.exports.conf= require('./config/multi.conf.js');//只需要加入这行载入配置文件
var http = require('http'),
    rrest = require('rrestjs'),
    server = http.createServer(function(req, res){
            res.send('hello world everyone!');
    }).listen(3000);

当然您还不必担心多cluster的session内存共享工作,rrestjs已经帮您自动同步内存session信息了,但是还是建议您利用rrestjs自带的mongodb的session功能存储

当您只开启1个cluster时,rrestjs框架会进入开发者模式,当配置文件中的目录里的文件发生改变时,cluster将自动重启,免去您频繁的CTRL+C和上+enter了

之前有TX议论是try{}catch{}好还是路由表好,我在0.9版本里为rrestjs新增加了一项简单的路由表控制,比如:

var conf = module.exports.conf= require('./config/post.conf.js');
conf.manualRouter = {//手动路由
    "get:/user/face":function(req, res){res.send('change face')},
    "post:put:/user/info":function(req, res){res.send('get not access!')},
    "/user/all":function(req, res){
        if(!req.session.count) req.session.count = 0
        res.send('all can access!'+(req.session.count++));
            },
}
var http = require('http'),
    rrest = require('../'),
    server = http.createServer(function (req, res){ //这里依然是主入口
        if(req.pathname === '/'){//匹配是否请求根目录
            res.send('hello world') 
            return false; //这里return false表示不再转发到下面路由表
        }//如果不是访问根目录,则去匹配路由表

    }).listen(rrest.config.listenPort);

简单说明一下:路由表的设置是这样规定的
方法:方法:URL路径

rrestjs也是支持类似try和catch的路由的,这样速度更快。

 module.exports.conf = require('./config/config');//加载配置文件,必须放在rrestjs加载之前
 var http = require('http'), 
 rrest = require('rrestjs'),
 server = http.createServer(function (req, res){
        //这里是主入口,可以根据您的需要自由添加一些东西
          try{
           require('./controller/'+req.path[0])[req.path[1]](req, res);
                  //这里是核心部分,执行指定控制器中的指定方法,将req和res传参进去
            }
         catch(err){ 
             restlog.info(err);//rrestjs封装的日志方法
             res.r404(); //相应定义好的404页面
         }
 }).listen(3000);

安装rrestjs的方法也非常简单:
npm install rrestjs
即可,也可以去github上下载:
rrestjs官网:www.rrestjs.com
基于rrestjs框架制作的轻博客:www.wujb.net

非常感谢您对rrestjs框架提供宝贵意见和bug。