NodeJs之MyWeb框架开发介绍

2018-06-07 15:41:16 浏览数 (1)

以下是NodeJs技术论坛专项发表,请勿转载,转载者需说明来源,没有说明来源私自转载将追究其法律责任

欢迎加入nodejs技术论坛:www.tnodejs.com

NodeJs之MyWeb框架开发介绍

本框架适合使用NodeJs进行web开发的MVC框架模式,本框架使用了express框架作为nodejs的web开发支撑,使用mysql作为数据库开发源,下面我们就简单的介绍如何利用本框架进行一个简单的web应用开发。当然本框架并非官方,也并非专业设计,希望开发者共同来把本框架设计好,以便我们可以在国内实现一个NodeJs的Web开发框架。

  • 一、项目文件夹介绍

项目文件夹主要是根据传统的MVC设计模式,设计出来的框架。[font=&amp]

主文件夹

子文件夹

文件说明

application

common 存放application公用文件 controller 逻辑处理层 core 处理基类文件 model 数据处理层

common

存放application公用文件

controller

逻辑处理层

core

处理基类文件

model

数据处理层

本文件夹存放核心的MVC设计 模式中的M和C,控制应用的整 体逻辑

common

存放application公用文件

controller

逻辑处理层

core

处理基类文件

model

数据处理层

conf

配置文件:路由处理、log处理、            数据结构、数据库链接数据

log

记录系统运行日志

public

css view层的样式 js view层的JavaScript

css

view层的样式

js

view层的JavaScript

主要是css文件和JavaScript文件

css

view层的样式

js

view层的JavaScript

node_module

Express、jade、mysql、 socket.io、qs、connect等

所有的nodejs的模块

view

source:资源文件

Jade文件html文件

  • 一、  入口文件介绍

本框架的入口文件为index.js,该入口你可以添加多种全局静态变量,例如你所需要的各个文件夹路径,以及一些模块。 举例如下:

复制代码

  1. //========================全局变量定义===============================
  2. global.BASE_DIR = __dirname;
  3. global.APP      = global.BASE_DIR "/application/";
  4. global.CON      = global.APP "/controller/";
  5. global.CORE     = global.APP "/core/";
  6. global.MODEL    = global.APP "/model/";
  7. global.CONF     = global.BASE_DIR "/conf/";
  8. global.log      = global.BASE_DIR "/log/";
  9. global.PUBLIC   = global.BASE_DIR "/public/";
  10. global.VIEW     = global.BASE_DIR "/view/";
  11. /**
  12. * modules引入
  13. */
  14. global.express = require('express');
  15. global.sio = require('socket.io');
  16. global.fs=require('fs');
  17. global.path = require('path');
  18. global.url = require('url');
  19. global.parseCookie = require('connect').utils.parseCookie;
  20. global.MemoryStore = require('./node_modules/connect/lib/middleware/session/memory');
  21. global.Session = require('./node_modules/connect/lib/middleware/session/session');
  22. global.sys = require('util');

代码2-1:index.js

   在index.js中你需要将你所有的文件夹路径、模块使用全局变量进行替换,该方法的优势在于,避免用户在编码中引入过长的文件路径,只需要使用简单的变量进行替换。

复制代码

  1. urlResolve = require(CORE "url_resolve");
  2. urlResolve.getActionInfo();

代码:2-2:路由处理逻辑[size=font-size:12.0pt,12.0pt]

本代码包含进逻辑处理类,同时应用逻辑处理类中的getActionInfo方法,创建服务器,并且处理url请求逻辑。

  • 三、 路由处理逻辑

主要有六个方法,其中的getActionInfo是exports,其他方法均为私有方法。

复制代码

  1. exports.getActionInfo = function(){
  2.     systemConfig();
  3.     app.get('/:key', function(req, res){
  4.         callUrlRequest(req, res);
  5.     });
  6.     app.post('/:key', function(req, res){
  7.         callUrlRequest(req, res);
  8.     });
  9.     listenPort();
  10. };
  11. function callUrlRequest(req, res){
  12.     var routerMsg = getUrlConf();
  13.     var key = req.params.key;
  14.     var session = checkSession(req, key);
  15.     if(key == "favicon.ico"){return;};
  16.     if(session == 0){
  17.         res.redirect('/index');
  18.         return;
  19.     }
  20.     console.log("[key:" key "] " "[class:" routerMsg[key].cla "] " "[controller:" routerMsg[key].fun "]");
  21.     require(CON routerMsg[key].con);
  22.     var controllerObj = eval("new " routerMsg[key].cla);
  23.     controllerObj.init(req, res);
  24.     controllerObj[routerMsg[key].fun].call();
  25. }

代码2-3:路由处理getActionInfo

SystemConfig是配置express框架的相应数据,配置静态文件夹以及express框架的相应配置数据。之后添加两种url请求方式,分别是get和post方法,由于两种方法请求资源的路由处理都是一样的,因此使用callUrlRequest来处理。

callUrlRequest

  1. 获取路由配置文件信息getUrlConf;
  2. 2、获取当前访问的key值,根据key值得到相应的配置信息,配置文件可以展示如下:[size=font-size:12.0pt,12.0pt]

复制代码

  1.     "test": {
  2.         "con" : "test",
  3.         "cla" : "test",
  4.         "fun" :"test"
  5.     },
  6.     "favicon.ico" : {
  7.         "con" : "",
  8.         "cla" : "",
  9.         "fun" : ""
  10.     },
  11.     "login" : {
  12.         "con" : "index_controller",
  13.         "cla" : "IndexController",
  14.         "fun" : "loginAct"
  15.     },
  16.     "index" : {
  17.         "con" : "index_controller",
  18.         "cla" : "IndexController",
  19.         "fun" : "loginPageAct"
  20.     },
  21.     "loginS" : {
  22.         "con" : "index_controller",
  23.         "cla" : "IndexController",
  24.         "fun" : "toMainPageAct"
  25.     }
  26. }

代码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的原型继承:

复制代码

  1. IndexController.prototype = new BaseController();
  2. global.IndexController = IndexController;
  • 五、 逻辑层实现

类同于数据层的实现方法,其继承都是来自于基类BaseController,BaseController现只包含三个方法:init、displayHtml、displayJade。

  • 六、 代码规范

     本框架不要求开发者是如何去定义代码规范,但本框架实现的代码规范是如下:

         变量命名:私有变量统一使用”_name”,全局变量使用大写”VIEW”,简单变量请使用骆驼峰”myName”

         方法命名:所有方法请使用骆驼峰”getUrlRequest”

        类命名:统一使用首字母大写骆驼峰”BaseController”

        文件命名:统一使用下划线分割,类使用下划线分割base_controller.js

        总结:整体上就可以实现一个MVC开发的MyWeb框架,其中的方法以及实现都还是处于稚嫩期,希望有开发者愿意加入,并且能够团队合作开发出我们国内优秀的NodeJs的MVC框架。

需要下载代码请转到:http://tnodejs.com/webphp/read.php?tid=21

0 人点赞