感谢支持
我们一直在努力

Node.js connect 安装、介绍与实例

http中间件:connect(sencha实验室的产品)  提供一个类似Javaee过滤器的框架,提供了很多中间件,如:日志、静态文件服务器,seesion等功能,官网 https://github.com/senchalabs/connect/ ,使用或看源码推荐看 https://github.com/senchalabs/connect/tree/1.8.4,因为默认首页是2.0版,代码已经重写了,帮助文档 http://senchalabs.github.com/connect/


相关阅读:


http://www.linuxidc.com/Linux/2012-02/53530.htm


http://www.linuxidc.com/Linux/2012-02/53531.htm


开始安装输入npm install connect,要等一会,再输入npm list




安装成功。该目录下会生成node_modules文件夹。


有位仁兄对nodejs模块connect源码进行分析,链接http://www.linuxidc.com/Linux/2012-02/53529.htm


我也看了一下源码,不是太复杂,主要是利用javascript的动态语音特性,核心代码片段如下:


connect.js 代码片段,对http进行封装


[javascript]


  1. var HTTPServer = require(‘./http’).Server  

  2.   

  3. // expose createServer() as the module   

  4. exports = module.exports = createServer;  

  5.   

  6. function createServer() {  

  7.   if (‘object’ == typeof arguments[0]) {  

  8.     return new HTTPSServer(arguments[0], Array.prototype.slice.call(arguments, 1));  

  9.   } else {  

  10.     return new HTTPServer(Array.prototype.slice.call(arguments));  

  11.   }  

  12. };  

  13.   

  14. fs.readdirSync(__dirname + ‘/middleware’).forEach(function(filename){  

  15.   if (/\.js$/.test(filename)) {  

  16.     var name = filename.substr(0, filename.lastIndexOf(‘.’));  

  17.     exports.middleware.__defineGetter__(name, function(){  

  18.       return require(‘./middleware/’ + name);  

  19.     });  

  20.   }  

  21. });  

  22.   

  23. exports.utils.merge(exports, exports.middleware);  


http.js 代码片段,this.stack 存储了所有的过滤链表,真的非常想java的过滤器,中间件的参数很像java的FilterConfig,   next()很像java的  filterChain.doFilter,可能更像Struts2 提供的默认拦截器栈


[javascript]


  1. var Server = exports.Server = function HTTPServer(middleware) {  

  2.   this.stack = [];  

  3.   middleware.forEach(function(fn){  

  4.     this.use(fn);  

  5.   }, this);  

  6.   http.Server.call(thisthis.handle);  

  7. };  

  8.   

  9. Server.prototype.__proto__ = http.Server.prototype;  

  10.   

  11. Server.prototype.use = function(route, handle){  

  12. …  

  13.   this.stack.push({ route: route, handle: handle });  

  14.   

  15.   // allow chaining   

  16.   return this;  

  17. };  

  18.   

  19.   

  20. Server.prototype.handle = function(req, res, out) {  

  21. …  

  22. function next(err) {  

  23. …  

  24. layer = stack[index++];  

  25. …  

  26. var arity = layer.handle.length;  

  27.       if (err) {  

  28.         if (arity === 4) {  

  29.           layer.handle(err, req, res, next);  

  30.         } else {  

  31.           next(err);  

  32.         }  

  33.       } else if (arity < 4) {  

  34.         layer.handle(req, res, next);  

  35.       } else {  

  36.         next();  

  37.       }  

  38. …  

  39.   next();  

  40.  }  


看了最简单的中间件 middleware/query.js,基本就明白,使用js动态语音特性,动态赋属性。


[javascript]


  1. var qs = require(‘qs’)  

  2.   , parse = require(‘url’).parse;  

  3.   

  4. module.exports = function query(){  

  5.   return function query(req, res, next){  

  6.     req.query = ~req.url.indexOf(‘?’)  

  7.       ? qs.parse(parse(req.url).query)  

  8.       : {};  

  9.     next();  

  10.   };  

  11. };  

http.Server.call(this, this.handle); 开始没看懂 ,后来看了 node.js 原本的http.js的代码片段  node.js,知道什么意思了

[javascript]


  1. exports.createServer = function(requestListener) {  

  2.   return new Server(requestListener);  

  3. };  

  4.   

  5. function Server(requestListener)   

写一个简单的实例 hello world


代码如下,保存为 connectTest.js,放在敲安装命令 的目录下:


[javascript]


  1. var connect = require(‘connect’);  

  2.   

  3. var app = connect()  

  4.   .use(connect.query())  

  5.   .use(function(req, res){  

  6.     var name = req.query.name;   

  7.     res.end(“hello “ + name);  

  8.   });  

  9.   

  10. app.listen(8080);  

  11. console.log(‘Server started on port 8080’);  
命令行输入 node connectTest.js




在浏览器地址栏输入 http://localhost:8080/?name=zhang,结果如下




就写到这,后面再写一些connect的应用。

赞(0) 打赏
转载请注明出处:服务器评测 » Node.js connect 安装、介绍与实例
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏