之前@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.net 或 http://wujb.cnodejs.net
非常感谢您对rrestjs框架提供宝贵意见和bug。
这么好的文章,竟然抢到沙发。^^^^
一个人的默默耕耘,我懂,你懂吗?
我还是很不认同简单的路由表控制机制
也或许我的理解是有问题的。
@ 错人了,改对了,呵呵。这也是妥协,有些时候有个路由表也很方便,特别是开发一个小的应用时。
rrest(function(req, res){})
我把这个东西去掉了,这样API是不是更简洁了呢
哈哈,感谢捧场啊~
@snoopy 不错,赞
@a272121742 这么晚还不睡觉啊~
@snoopy 属于晚上活动的动物
现在rrestjs改成了覆盖http模块的了?感觉这种会污染外部模块的做法不太好哦~
嗯就覆盖了一个方法,其他没变,哈哈~为了API简洁没办法啊,有TX提出那个rrest(fn) 太直接了,我就想办法把它隐藏掉了@a272121742
@snoopy 为毛不试试继承http…