NodeJs之MyWeb框架开发介绍
2012-05-21 11:33
369 查看
以下是NodeJs技术论坛专项发表,请勿转载,转载者需说明来源,没有说明来源私自转载将追究其法律责任
欢迎加入nodejs技术论坛:www.tnodejs.com
NodeJs之MyWeb框架开发介绍
本框架适合使用NodeJs进行web开发的MVC框架模式,本框架使用了express框架作为nodejs的web开发支撑,使用mysql作为数据库开发源,下面我们就简单的介绍如何利用本框架进行一个简单的web应用开发。当然本框架并非官方,也并非专业设计,希望开发者共同来把本框架设计好,以便我们可以在国内实现一个NodeJs的Web开发框架。
一、项目文件夹介绍
项目文件夹主要是根据传统的MVC设计模式,设计出来的框架。[font=&]
一、 入口文件介绍
本框架的入口文件为index.js,该入口你可以添加多种全局静态变量,例如你所需要的各个文件夹路径,以及一些模块。
举例如下:
复制代码
//========================全局变量定义===============================
global.BASE_DIR = __dirname;
global.APP = global.BASE_DIR + "/application/";
global.CON = global.APP + "/controller/";
global.CORE = global.APP + "/core/";
global.MODEL = global.APP + "/model/";
global.CONF = global.BASE_DIR + "/conf/";
global.log = global.BASE_DIR + "/log/";
global.PUBLIC = global.BASE_DIR + "/public/";
global.VIEW = global.BASE_DIR + "/view/";
/**
* modules引入
*/
global.express = require('express');
global.sio = require('socket.io');
global.fs=require('fs');
global.path = require('path');
global.url = require('url');
global.parseCookie = require('connect').utils.parseCookie;
global.MemoryStore = require('./node_modules/connect/lib/middleware/session/memory');
global.Session = require('./node_modules/connect/lib/middleware/session/session');
global.sys = require('util');
代码2-1:index.js
在index.js中你需要将你所有的文件夹路径、模块使用全局变量进行替换,该方法的优势在于,避免用户在编码中引入过长的文件路径,只需要使用简单的变量进行替换。
复制代码
urlResolve = require(CORE + "url_resolve");
urlResolve.getActionInfo();
代码:2-2:路由处理逻辑[size=font-size:12.0pt,12.0pt]
本代码包含进逻辑处理类,同时应用逻辑处理类中的getActionInfo方法,创建服务器,并且处理url请求逻辑。
三、 路由处理逻辑
主要有六个方法,其中的getActionInfo是exports,其他方法均为私有方法。
复制代码
exports.getActionInfo = function(){
systemConfig();
app.get('/:key', function(req, res){
callUrlRequest(req, res);
});
app.post('/:key', function(req, res){
callUrlRequest(req, res);
});
listenPort();
};
function callUrlRequest(req, res){
var routerMsg = getUrlConf();
var key = req.params.key;
var session = checkSession(req, key);
if(key == "favicon.ico"){return;};
if(session == 0){
res.redirect('/index');
return;
}
console.log("[key:"+ key +"] " + "[class:" + routerMsg[key].cla + "] " + "[controller:" + routerMsg[key].fun +"]");
require(CON + routerMsg[key].con);
var controllerObj = eval("new " + routerMsg[key].cla);
controllerObj.init(req, res);
controllerObj[routerMsg[key].fun].call();
}
代码2-3:路由处理getActionInfo
SystemConfig是配置express框架的相应数据,配置静态文件夹以及express框架的相应配置数据。之后添加两种url请求方式,分别是get和post方法,由于两种方法请求资源的路由处理都是一样的,因此使用callUrlRequest来处理。
callUrlRequest
获取路由配置文件信息getUrlConf;
2、获取当前访问的key值,根据key值得到相应的配置信息,配置文件可以展示如下:[size=font-size:12.0pt,12.0pt]
复制代码
"test": {
"con" : "test",
"cla" : "test",
"fun" :"test"
},
"favicon.ico" : {
"con" : "",
"cla" : "",
"fun" : ""
},
"login" : {
"con" : "index_controller",
"cla" : "IndexController",
"fun" : "loginAct"
},
"index" : {
"con" : "index_controller",
"cla" : "IndexController",
"fun" : "loginPageAct"
},
"loginS" : {
"con" : "index_controller",
"cla" : "IndexController",
"fun" : "toMainPageAct"
}
}
代码2-4:配置文件信息
如果当前key为test那么我们就可以得到相应的controller、class和function。同时因为nodejs服务器每次请求数据的时候都会加入favicon.ico,因此在代码中我们需要将其剔除。对于checkSession就是验证登录信息。
3. 得到controller、class和function,首先require相应的controller,然后使用eval来new相应对象,使用controllerObj[routerMsg[key].fun].call();该方法进行调用。(本部分处理,涉及到一个JavaScript的小技巧,如何对一个字符串进行new,同时调用一个对象的方法,该方法名为字符串变量)
4. 最后就是listenPort();进行监听事件,也是服务器开始启动。这样一个基本的路由处理就完成实现了。
四、 数据层实现
本系统数据层基类是在core文件夹下的base_model.js,该类主要包含数据库的一般方法,主要含有数据库链接、数据库操作基本方法add、update、deleteItem、query、select等,具体实现方式,就不细讲。
BaseModel为基类,其他对应于相应的表的类都继承来自BaseModel基类
继承方法使用JavaScript的原型继承:
复制代码
IndexController.prototype = new BaseController();
global.IndexController = IndexController;
五、 逻辑层实现
类同于数据层的实现方法,其继承都是来自于基类BaseController,BaseController现只包含三个方法:init、displayHtml、displayJade。
六、 代码规范
本框架不要求开发者是如何去定义代码规范,但本框架实现的代码规范是如下:
变量命名:私有变量统一使用”_name”,全局变量使用大写”VIEW”,简单变量请使用骆驼峰”myName”
方法命名:所有方法请使用骆驼峰”getUrlRequest”
类命名:统一使用首字母大写骆驼峰”BaseController”
文件命名:统一使用下划线分割,类使用下划线分割base_controller.js
总结:整体上就可以实现一个MVC开发的MyWeb框架,其中的方法以及实现都还是处于稚嫩期,希望有开发者愿意加入,并且能够团队合作开发出我们国内优秀的NodeJs的MVC框架。
本框架开发版权所有,由个人开发实现,转载者必须说明来源www.tnodejs.com,谢谢合作
需要下载代码请转到:http://tnodejs.com/webphp/read.php?tid=21
欢迎加入nodejs技术论坛:www.tnodejs.com
NodeJs之MyWeb框架开发介绍
本框架适合使用NodeJs进行web开发的MVC框架模式,本框架使用了express框架作为nodejs的web开发支撑,使用mysql作为数据库开发源,下面我们就简单的介绍如何利用本框架进行一个简单的web应用开发。当然本框架并非官方,也并非专业设计,希望开发者共同来把本框架设计好,以便我们可以在国内实现一个NodeJs的Web开发框架。
一、项目文件夹介绍
项目文件夹主要是根据传统的MVC设计模式,设计出来的框架。[font=&]
主文件夹 | 子文件夹 | 文件说明 | ||||||||
application |
| 本文件夹存放核心的MVC设计 模式中的M和C,控制应用的整 体逻辑 | ||||||||
conf | 无 | 配置文件:路由处理、log处理、 数据结构、数据库链接数据 | ||||||||
log | 无 | 记录系统运行日志 | ||||||||
public |
| 主要是css文件和JavaScript文件 | ||||||||
node_module | Express、jade、mysql、 socket.io、qs、connect等 | 所有的nodejs的模块 | ||||||||
view | source:资源文件 | Jade文件html文件 |
本框架的入口文件为index.js,该入口你可以添加多种全局静态变量,例如你所需要的各个文件夹路径,以及一些模块。
举例如下:
复制代码
//========================全局变量定义===============================
global.BASE_DIR = __dirname;
global.APP = global.BASE_DIR + "/application/";
global.CON = global.APP + "/controller/";
global.CORE = global.APP + "/core/";
global.MODEL = global.APP + "/model/";
global.CONF = global.BASE_DIR + "/conf/";
global.log = global.BASE_DIR + "/log/";
global.PUBLIC = global.BASE_DIR + "/public/";
global.VIEW = global.BASE_DIR + "/view/";
/**
* modules引入
*/
global.express = require('express');
global.sio = require('socket.io');
global.fs=require('fs');
global.path = require('path');
global.url = require('url');
global.parseCookie = require('connect').utils.parseCookie;
global.MemoryStore = require('./node_modules/connect/lib/middleware/session/memory');
global.Session = require('./node_modules/connect/lib/middleware/session/session');
global.sys = require('util');
代码2-1:index.js
在index.js中你需要将你所有的文件夹路径、模块使用全局变量进行替换,该方法的优势在于,避免用户在编码中引入过长的文件路径,只需要使用简单的变量进行替换。
复制代码
urlResolve = require(CORE + "url_resolve");
urlResolve.getActionInfo();
代码:2-2:路由处理逻辑[size=font-size:12.0pt,12.0pt]
本代码包含进逻辑处理类,同时应用逻辑处理类中的getActionInfo方法,创建服务器,并且处理url请求逻辑。
三、 路由处理逻辑
主要有六个方法,其中的getActionInfo是exports,其他方法均为私有方法。
复制代码
exports.getActionInfo = function(){
systemConfig();
app.get('/:key', function(req, res){
callUrlRequest(req, res);
});
app.post('/:key', function(req, res){
callUrlRequest(req, res);
});
listenPort();
};
function callUrlRequest(req, res){
var routerMsg = getUrlConf();
var key = req.params.key;
var session = checkSession(req, key);
if(key == "favicon.ico"){return;};
if(session == 0){
res.redirect('/index');
return;
}
console.log("[key:"+ key +"] " + "[class:" + routerMsg[key].cla + "] " + "[controller:" + routerMsg[key].fun +"]");
require(CON + routerMsg[key].con);
var controllerObj = eval("new " + routerMsg[key].cla);
controllerObj.init(req, res);
controllerObj[routerMsg[key].fun].call();
}
代码2-3:路由处理getActionInfo
SystemConfig是配置express框架的相应数据,配置静态文件夹以及express框架的相应配置数据。之后添加两种url请求方式,分别是get和post方法,由于两种方法请求资源的路由处理都是一样的,因此使用callUrlRequest来处理。
callUrlRequest
获取路由配置文件信息getUrlConf;
2、获取当前访问的key值,根据key值得到相应的配置信息,配置文件可以展示如下:[size=font-size:12.0pt,12.0pt]
复制代码
"test": {
"con" : "test",
"cla" : "test",
"fun" :"test"
},
"favicon.ico" : {
"con" : "",
"cla" : "",
"fun" : ""
},
"login" : {
"con" : "index_controller",
"cla" : "IndexController",
"fun" : "loginAct"
},
"index" : {
"con" : "index_controller",
"cla" : "IndexController",
"fun" : "loginPageAct"
},
"loginS" : {
"con" : "index_controller",
"cla" : "IndexController",
"fun" : "toMainPageAct"
}
}
代码2-4:配置文件信息
如果当前key为test那么我们就可以得到相应的controller、class和function。同时因为nodejs服务器每次请求数据的时候都会加入favicon.ico,因此在代码中我们需要将其剔除。对于checkSession就是验证登录信息。
3. 得到controller、class和function,首先require相应的controller,然后使用eval来new相应对象,使用controllerObj[routerMsg[key].fun].call();该方法进行调用。(本部分处理,涉及到一个JavaScript的小技巧,如何对一个字符串进行new,同时调用一个对象的方法,该方法名为字符串变量)
4. 最后就是listenPort();进行监听事件,也是服务器开始启动。这样一个基本的路由处理就完成实现了。
四、 数据层实现
本系统数据层基类是在core文件夹下的base_model.js,该类主要包含数据库的一般方法,主要含有数据库链接、数据库操作基本方法add、update、deleteItem、query、select等,具体实现方式,就不细讲。
BaseModel为基类,其他对应于相应的表的类都继承来自BaseModel基类
继承方法使用JavaScript的原型继承:
复制代码
IndexController.prototype = new BaseController();
global.IndexController = IndexController;
五、 逻辑层实现
类同于数据层的实现方法,其继承都是来自于基类BaseController,BaseController现只包含三个方法:init、displayHtml、displayJade。
六、 代码规范
本框架不要求开发者是如何去定义代码规范,但本框架实现的代码规范是如下:
变量命名:私有变量统一使用”_name”,全局变量使用大写”VIEW”,简单变量请使用骆驼峰”myName”
方法命名:所有方法请使用骆驼峰”getUrlRequest”
类命名:统一使用首字母大写骆驼峰”BaseController”
文件命名:统一使用下划线分割,类使用下划线分割base_controller.js
总结:整体上就可以实现一个MVC开发的MyWeb框架,其中的方法以及实现都还是处于稚嫩期,希望有开发者愿意加入,并且能够团队合作开发出我们国内优秀的NodeJs的MVC框架。
本框架开发版权所有,由个人开发实现,转载者必须说明来源www.tnodejs.com,谢谢合作
需要下载代码请转到:http://tnodejs.com/webphp/read.php?tid=21
相关文章推荐
- 惊艳的基于nodejs的实时Web开发框架Meteor介绍
- Vaadin Web应用开发教程(3):Vaadin应用程序框架介绍
- Python微型web开发框架flask介绍及一个小例子
- 我的第一个python web开发框架(15)——公司介绍编辑功能
- PHPWeb开发框架Swoole的介绍
- nodejs的精简型和全栈型开发框架介绍
- ASP.NET Web开发框架之零 项目介绍
- 基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍
- java web开发学习-3 常用框架介绍
- 十个最适合 Web 和 APP 开发的 NodeJS 框架
- 移动设备web开发首选框架:zeptojs介绍
- 十个最适合 Web 和 APP 开发的 NodeJS 框架
- 介绍几个移动web app开发框架
- ASP.NET Web开发框架之零 项目介绍
- Go语言及其WEB快速开发框架介绍
- 介绍几个基于动态语言的快速Web开发框架
- 快速开发高性能Jsp Web应用---FastJsp框架介绍
- karloop介绍--hello world大家好,今天为大家介绍一款非常轻量级的的web开发框架,karloop框架。使用python开发 首先我们下载karloop源码进行安装。 源码地址 下载成
- 10 个最适合 Web 和 APP 开发的 NodeJS 框架
- (转)基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍