日期:2014-05-16  浏览次数:20365 次

我也来学习nodejs 没有就自己来 色色实现迷你 MVC

我也来学习nodejs 郁闷的天 文档很不咋的 实例根本跟不上 产品不成熟

?

完事开头难,聊天室还是有困难的啊 写起来 今天下午第一次接触这个玩意 ...

?

忽然发现 完全与之前的web开发 不挂钩 后端 还得自己去 处理各种请求 ....

?

实现聊天室 如果没有一个标准的话 后面东西很乱.... 写就写好 ...

?

先把框架雏形写出来再说 ... 靠 我也实现个MVC出来玩

?

下面这个雏形 基本源自 我自己的php框架思想 .... 基本有了 明天继续实现

?

今明2天把 框架实现好,后面可以自己叠加应用了 .......

?

可能哥以后 就有段时间折腾这破玩意了...

?

?

?

console.log('kenxu聊天室程序');
// 实现 简易的MVC模式
var Http = require('http');
var System = require("sys");
var FileSystem = require("fs");
var Url = require("url");

// 工具代码
var __undef = 'undefined',__proto = "prototype";
Object.extend = function(dest, source) {
	for (var property in source) dest[property] = source[property];
	return dest;
};
Object.extend(String[__proto],{
	trim: function(){return this.replace(/^\s+|\s+$/g, '');}
});
var Utilities = {
	arrayMap: function(list, fn) {
		if (list && list.length){
			var r = [];
			for (var i = 0; i < list.length; i++) {
				var x = fn(list[i], i);
				if (x !== null) {
					r.push(x) ;
				}
			}
			return r ;
		}
		return [];
	} ,
	each: function(list,fn){
		if (list && list.length)
			for (var i = 0; i < list.length; i++)
				if (fn.call(list[i],i) == '#end#') break ;
	}
};


/**
 * UDI 对象 实现请求资源定位器
 * @type 
 */
var UDI = {
	UDI_CONTROLLER: 'controller',
	UDI_ACTION: 'action',
	DEFAULT_CONTROLLER: 'application', 
	DEFAULT_ACTION: 'index' 
};

function __request_filter(pathinfo){
	var pathinfo = pathinfo || '/';
	var parts = pathinfo.substr(1).split('/');
	
	var params = {};
	if (parts[0] && parts[0].trim().length > 0){
		params[UDI.UDI_CONTROLLER] = parts[0].trim();
	}
	if (parts[1] && parts[1].trim().length > 0){
		params[UDI.UDI_ACTION] = parts[1].trim();
	}
	
    for (var i = 2; i < parts.length; i += 2) {
        if (parts[i + 1]) {
            params[parts[i]] = parts[i + 1];
        }
    }
    
    // 校验 UDI参数是否存在
    if (!params[UDI.UDI_CONTROLLER]){
    	params[UDI.UDI_CONTROLLER] = UDI.DEFAULT_CONTROLLER;
    }
    if (!params[UDI.UDI_ACTION]){
    	params[UDI.UDI_ACTION] = UDI.DEFAULT_ACTION;
    }
    
	return params;
}

var QRequest = function(req){
	this._req = req;
	
};

/**
 * 单一入口分发器
 * @type 
 */
var Dispatcher = {
	
	/**
	 * 请求分发方法,可能会抛出异常,不知道异常怎么写...
	 * 
	 * @param {} request
	 * @param {} response
	 */
	dispose: function(request, response){
		
		// 取拼装控制器以及action
		var pathinfo = Url.parse(request.url).pathname;
		
		var params = __request_filter(pathinfo);
		console.log(params);
		
		response.writeHead(200, {'Content-Type': 'text/plain'});
		response.end(pathinfo + '\n');
		
	}
	
};

//SFW.Controller = function(request)

Http.createServer(function (request, response) {
	try {
		Dispatcher.dispose(request, response);
	} 
	catch(e){
		console.log(e);
	}
}).listen(8124);

 

?

运行之后

?

http://localhost:8124/ 会输出 { controller: 'application', action: 'index' }

?

http://localhost:8124/hello/world/id/123/page/12 会输出

{ controller: 'hello',
? action: 'world',
? id: '123',
? page: '12' }

?

似乎 还行啊 不知道性能怎么样....

?

下面把 网站贴下 方便 学习:

?

?

https://github.com/joyent/node/wiki/modules

http://cnodejs.org/blog/?p=104

http://www.cnblogs.com/QLeelulu/archive/2011/01/28/nodejs_into_and_n2mvc.html? 源代码下载

http://cnodejs.org/cman/ []

http://cnodejs.org/api/

http://seajs.com/

http://www.w3school.com.cn/js/jsref_substr.asp

?

1 楼 vb2005xu 2011-06-01  
晚上终于把 nodejs-alldoc.rar 给看完了
2 楼 vb2005xu 2011-06-01  
个人感觉 功能虽然强大 但是应用开发难度颇大

基本都需要有 强悍的 系统编程以及套接字编程的经验

对于前端熟