rrestjs框架更简洁的api
发布于 12 年前 作者 DoubleSpout 6889 次浏览 最后一次编辑是 8 年前

之前@yansong 同学写了一篇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上下载: https://github.com/DoubleSpout/rrestjs rrestjs官网:www.rrestjs.com 基于rrestjs框架制作的轻博客:www.wujb.nethttp://wujb.cnodejs.net

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

10 回复

这么好的文章,竟然抢到沙发。^^^^

一个人的默默耕耘,我懂,你懂吗?

我还是很不认同简单的路由表控制机制

也或许我的理解是有问题的。

@ 错人了,改对了,呵呵。这也是妥协,有些时候有个路由表也很方便,特别是开发一个小的应用时。

rrest(function(req, res){})

我把这个东西去掉了,这样API是不是更简洁了呢

哈哈,感谢捧场啊~

@a272121742 这么晚还不睡觉啊~

@snoopy 属于晚上活动的动物

现在rrestjs改成了覆盖http模块的了?感觉这种会污染外部模块的做法不太好哦~

嗯就覆盖了一个方法,其他没变,哈哈~为了API简洁没办法啊,有TX提出那个rrest(fn) 太直接了,我就想办法把它隐藏掉了@a272121742

@snoopy 为毛不试试继承http…

回到顶部