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 | var http = require('http'), |
一切都和原来一样,只是在入口文件处引入 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表示文件存放目录