time 
设为首页】【收藏本站
当前位置: 主页 > JavaScript > 其它JS框架 > nodejs简易MVC的实现

nodejs简易MVC的实现

时间:2013-05-22 01:13 点击:4150次 字体:[ ]




  相信大家对于nodejs应该不会陌生,如果真的比较陌生的请访问:http://nodejs.org或者http://cnodejs.org/了解。

  这个简易MVC的结构如下图:

    nodejs简易MVC的实现_www.fengfly.com

  首先需要一个http服务来监听来自客户端的请求,大致代码如下:

  1. var m_http = require('http');  
  2. var m_querystring = require('querystring');  
  3.  
  4. var m_requestHandler = require('./requestHandler');  
  5.  
  6. exports.run = function (port) {  
  7.     port || (port = 80);  
  8.  
  9.     m_http.createServer(function (req, res) {  
  10.         req.setEncoding('utf8');  
  11.  
  12.         var postData = [];  
  13.  
  14.         req.on('data'function (chunk) {  
  15.             postData.push(chunk);  
  16.         }).on('end'function () {  
  17.             req.post = m_querystring.parse(postData.join(''));  
  18.  
  19.             m_requestHandler.handle(req, res);  
  20.         });  
  21.  
  22.     }).listen(port);  
  23.  
  24.     console.log('服务器启动!');  
  25. }; 

  以上req.on('data', ...)内,使用的是一个postData的数组来保存请求的数据,但是当数据量大的时候,会出现一些问题,这个我们暂时不管,博友么可以自己去完善,^_^

  接收了请求之后,需要通过请求的url和method去查找与之相匹配的Contoller,并调用Controller相应的Action,大致代码如下:

  1. var m_route = require('./route');  
  2. var m_controllerBase = require('./controllerBase');  
  3. var m_invalidHandler = require('./invalidHandler');  
  4.  
  5. var m_getRequestArgs = { ... };  
  6.  
  7. exports.handle = function (req, res) {  
  8.     var method = req.method ? req.method.toLowerCase() : 'get';  
  9.     var route = m_route.find(req.url, method);  
  10.  
  11.     var controller = require(m_util.format('./controllers/%s', route.controller));  
  12.     if (controller[route.action]) {  
  13.         try {  
  14.             controller[route.action].call(  
  15.                 new m_controllerBase(req, res),  
  16.                 m_getRequestArgs.hasOwnProperty(method) ? m_getRequestArgs[method](req) : {});  
  17.         }  
  18.         catch (e) {  
  19.             m_invalidHandler.handle500(req, res);  
  20.         }  
  21.     }  
  22.     else {  
  23.         m_invalidHandler.handle404(req, res);  
  24.     }  
  25. }; 



本文地址 : http://www.fengfly.com/plus/view-212734-1.html
标签: MVC nodejs
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: