RestSpout,轻量级Restful面向资源framework,完美兼容expressjs

Restful这个名词听起来挺牛b的,其精髓就是面向资源的架构,表示一个资源一个url地址,根据http请求的不同表示对资源的不同操作。目前的node.js页面框架expressjs要开发面向资源的架构,必须设置很多app.get(/正则路由/, callback)等等;当有一些新的资源加入后,必须要去修改路由正则表。

而且对于一些简单的http接口开发,非对用户的,想要接收http请求参数然后去操作数据库,再响应给其他app的,使用expressjs又要配置好多,又麻烦,而且根据我最近研究了expressjs的代码,其api的友好度一般,还污染了request和response的原型链的命名空间。

RestSpout可能适用于以下两类用户:

1、想利用expressjs开发Restful的web页面服务,又不想对expressjs框架做二次开发,您只需在入口处引入 RestSpout 模块,一切轻松搞定,RestSpout 大部分方法调用是利用 function.call 原理的,最小程度的污染了 request和response 原型链的命名空间,而且 RestSpout 几乎可以兼容目前所有的 node.js framework。而且每次有请求进来,都是request类的一个实例,如果request类过大,会影响响应的效率,对于这点使用RestSpout无需关心。

2、不想利用任何 web 框架,而只是单纯的在内网做一个app应用,例如数据库接口服务器。因为node.js原生的对http请求的处理很原始,连很基本的 $_POST 都需要自己写,这时在入口处加载 RestSpout 就可以很方便的处理基本的get和post型http请求了。

RestSpout优势:

1、兼容性好,几乎可以兼容目前所有node.js web框架,只要命名空间不冲突即可;

2、轻量级,最小化程度减少request和response 原型链的命名空间污染,对效率几乎没有影响;

3、补足了expressjs的一些遗漏的api,比如:文件上传和客户端IP,方便用户利用expressjs开发更加面向资源的Restful式服务;

4、API友好,没有提出新的对象,只是对原生node.js api上的 request和response 类加以扩充,无学习成本和难度。

项目地址:

https://github.com/DoubleSpout/RestSpout

一个简单的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var http = require('http'),

RestSpout = require('../lib/RestSpout'),//do nothing but only require it!

server = http.createServer(function (req, res) {

res.write('<body>');

res.write('req.path:'+req.path+'<br />');

res.write('req.ip:'+req.ip+'<br />');

res.write('req.referer or req.referrer:'+req.referer+'<br />');

res.write('req.UserAgent:'+req.UserAgent+'<br />');

res.write('req.GetParam:'+JSON.stringify(req.GetParam)+'<br />');

res.write('req.cookie:'+JSON.stringify(req.cookie)+'<br />');

res.end('</body>');

}).listen(3000);

一切都和原来一样,只是在入口文件处引入 RestSpout = require(‘../lib/RestSpout’) 即可,您将方便许多!

目前写好了requset类对expressjs的补充,response类expressjs已经很完善了,过阵子再写吧。

req:

属性:(property)

1、path:一个数组,拆分了’/‘分割的uri

2、ip:客户端ip字符串

3、referer(referer+):访问来源

4、UserAgent:客户端信息

5、GetParam:用户GET请求过来的参数

6、PostParam:用户POST请求过来的参数,具体用法请参与expamle中的ResPost.js

7、cookie:cookie对象key-value

方法:(method)

1、GetPost(callback):获取Post数据完毕时调用callback,具体用法请参与expamle中的ResPost.js

2、GetMultiPost([filedir], [callback]):文件上传成功以后调用callback,filedir表示文件存放目录