myweb框架简单说明
发布于 3年前 作者 huangdh3 3112 次浏览

之前有写过一篇nodejs入门包括服务器的各种配置,npm安装。这篇文章也得到了很多人的肯定,在这里我也非常的感谢大家。今天给大家介绍的是nodejs的myweb框架的基本认识,myweb框架的开发心得,以及遇到的一些问题。
一、什么是myweb框架?
他是一个基于nodejs的web应用框架,其中应用到了express框架和jade解析模板。整体上说该框架只是在express搭建了一层mvc实现方式。那么myweb框架给开发者带来了什么便利呢?
二、myweb框架带来的便利
1、 MVC开发模式
在PHP开发中我们经常会应用MVC设计模式开发出一套框架,而NodeJs在现发展初期,还没有比较成熟的MVC开发框架,大部分都是通过自我根据express框架进行搭建。本框架也属于个人搭建的MVC框架。该框架很适合PHP开发者,因为本人也是一个PHP和JavaScript开发者,因此主要是借鉴PHP的MVC模式来搭建该框架。
2、 路由处理
路由处理是框架的一个基本的也是关键的部分,路由处理的方式直接影响到url的显示方式。 本框架路由经历了两个过程:
a、 直接通过key值来判断用户请求的资源,例如:
http://127.0.0.1:3000/index,这个请求我们利用express获取key值index,然后读取配置文件信息

index{file:’index_controller’,class:’indexController’,function:’loginAct’}

从而我们根据index值得到了所有的controller和action,那么我们如何去访问这个action呢(这部分写在文档最后技术实现)?
b、 第一种方式,不知道大家是否会发现一个问题。当我们有300个action时(很正常),我们需要写入300条记录到一个配置文件中,这样会导致配置文件越来越繁重。因此就出现第二种路由处理方式:

http://127.0.0.1:3000/index?c=login

根据index获取当前的controller,根据c的参数获取当前需要访问的action,这样 我们的一个controller只对应一个配置信息。从而减少读取配置文件的时间。
3、 数据库链接
本框架只提供了一种链接mysql的方式,希望在后期能够提供更多的数据库链接。链接mysql数据库的方式,这里就不需要细讲,大家可以通过github上查找node mysql学习资源。
本框架封装了一些基本的数据库操作从而减少开发者开发时间,只需要通过add、update、delete、query、select简单粗暴的去执行。
4、 日志处理
本框架实现了一个自我的日志记录处理功能,主要是便于系统运营。
其中的日志设定:错误、警告、流水记录,同时可以设定日志错误级别,以便系统出错时即时的定位。
5、 邮件发送功能
这个功能没有做进一步的封装,只是利用了他人的库进行配置,之后会做进一步封装。
6、 您只需要一步就可以实现本系统运行,下载该框架代码,执行node index.js就可以运行本框架(如果使用到session登录请下载redis-server.exe,去github下载)。
三、技术实现细节
之前有发表过一篇文章《如何一体化一个NodeJs的MVC开发框架》里面有涉及到大部分该框架的开发技术细节。这里我只介绍如何new一个controller同时,访问对象的一个action的方式
Nodejs不像PHP有一个call_function函数可以执行访问对象中的某个方法名函数。
我们需要以下要求和需要解决的问题:
1、 因为express中的req和res是必须要贯穿整个系统的,因此我们必须把这两个参数作为基类的变量,以便继承类中可以随时的调用;
2、 如何new一个字符串的controller,也就是给你一个controller字符串名,然后你需要去new这个名为controller的对象;
3、 如何访问一个对象的function(注意:这个function名是一个字符串)
针对以上三个问题我们做如何解决:
1、 我们可以定义一个init构造函数

controllerObj.init(req, res)

2、 利用JavaScript中的eval
例如:

var controllerObj = eval("new " +className)

3、 利用JavaScript中的call方法

controllerObj[functionName].call();

最新代码地址:https://github.com/tnodejs/myweb-nodejs
我的菜鸟论坛:www.tnodejs.com tnodejs.com
——————————————————————————————————
你赋予人生何种意义,他就是何种意义
——————————————————————————————————

if(life.wantToBe == 'fish'){
    your.career = 'fish';
} else {
    your.career = 'not fish';
}
console.log("Anyway you must believe yourself!");
7 回复
var controllerObj = eval("new " +className);

这个 直接 new ClassName() 就可以吧

controller 做成 module var Controller = require(controller_path); var ctrl = new Controller;

可以么~似乎是不行的~因为那个className是一个字符串!你可以去试试

function test(){}
var mm = new 'test';

@huangdh3 controller 做成 module var Controller = require(controller_path); var ctrl = new Controller;

@blue5tar 这样是ok的~不过在考虑到继承的原因,controller没有使用module形式!

@huangdh3 module 也可以继承啊 还有你controller 这个类 方法都写到构造函数里面 每次 new的时候 都初始这些方法也不好

@blue5tar 嗯~说的对~很有道理~谢谢提醒!嘿嘿!

PHP 真的就那么好,要把那套拿到 NodeJS 中。

难道使用 NodeJS + Javascript 不应该做出出更佳的设计吗?

回到顶部