设为首页 收藏本站
查看: 799|回复: 0

[经验分享] NodeJs之MyWeb框架开发介绍

[复制链接]

尚未签到

发表于 2017-2-21 12:05:52 | 显示全部楼层 |阅读模式
  以下是NodeJs技术论坛专项发表,请勿转载,转载者需说明来源,没有说明来源私自转载将追究其法律责任
  欢迎加入nodejs技术论坛:www.tnodejs.com
NodeJs之MyWeb框架开发介绍

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


  • 一、项目文件夹介绍

项目文件夹主要是根据传统的MVC设计模式,设计出来的框架。
主文件夹子文件夹文件说明
application
common存放application公用文件
controller逻辑处理层
core处理基类文件
model数据处理层
本文件夹存放核心的MVC设计
模式中的M和C,控制应用的整
体逻辑
conf配置文件:路由处理、log处理、
数据结构、数据库链接数据
log记录系统运行日志
public
cssview层的样式
jsview层的JavaScript

主要是css文件和JavaScript文件
node_moduleExpress、jade、mysql、
socket.io、qs、connect等
所有的nodejs的模块
viewsource:资源文件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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345259-1-1.html 上篇帖子: NodeJS微信公众平台开发 下篇帖子: ubuntu12.04 下安装nodejs【整理】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表