注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

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

2011-12-31 17:04:16|  分类: node |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
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 类加以扩充,无学习成本和难度。

项目地址:

一个简单的例子:
    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表示文件存放目录
  评论这张
 
阅读(1778)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016