node.js框架 express的mvc简单解释

最近研究了下node.js, 这个东西好, 就如毛主席说的。作者在C++层包装了一个解析器,让js拥有了指挥C C++操作socket htpp协议的原力。

jser在继移动端,现在又进军到网络和文件的底层。

js是个好东西, 弱类型灵活,JSON的发明让js更是如虎添翼。因为js操纵JSON完全就是在操纵自己的原生对象一样简单和有效。js可以灵活的处理其他强类型语言需要一大堆代码才能判断正确的内容。

Express :

  1. 首先 routes文件夹不属于express模块,他真的只是个文件夹, 是作者默认给使用者设置的写控制器C的位置。应该始终将控制器逻辑写在相似的目录文件里,方便管理维护和创建新的对象。

2.express 并不算是实现MVC框架

(1) 首先M不需要他提供, http+数据库这一部分, 数据库提供了M。数据库包括SELECT检索(get), 添加INSERT INTO, 删除DELETE。。。

Model所具备的许多特性。

不过数据库不是js语言编写的, 但是已经有人写好了mysql模块, 作为与M通信的适配器。也就是我们用mysql模块的query(),可以调用MYSQL的SELECT INSERT 。。。

(2)因为服务器端的原因,并不能遵循定义式的MVC

MVC的定式, M要负责通知V,但是这里M是脱离了语言的数据库,无法通知V。可以在C中让控制器负责这个任务, render()方法。

另外V与C的分离,其实是借助ejs jade模板引擎。服务器端不存在真正的视图。这个道理很明显。

express的视图做了这样的任务:

写好html结构, 负责生成字符串。依然是控制器最后调取View中的字符串,然后render->write 给浏览器。

(MVC定义的视图是负责调取数据,显示)

(而这里是负责生成控制器需要的字符串格式, 由控制器发送)

总之,就是:控制器负责了一切。

  1. express是怎么工作的

在MVC意义上,是这样工作的:

一个子视图控件v-----[绑定]------>一个子控制器c 发送消息

此子控制器c---------[绑定]--------->模型M 一系列复杂的逻辑调用

模型M---------->[观察者]--------->观察视图控件u,x update重新获取数据自我刷新

express基于服务器, 大部分只有get post两个消息,

没有子视图可以绑定控制器, 如何来建立这条消息通道。

express采用这样的方法, 通过request对象可以获取到 get/post消息类型 url字符串-pathname路径所以if检测 pathname 和get/post 类型来调用需要的子控制器。

怎么建立这个检测?

在express中设置一个methods之类的栈之类的集合, 存储子控制器的指针。这个“指针”包括: 路径名字 请求类型 子控制器的方法指针。然后提供add方法(get, post)向methods中添加新的子控制器。

当服务器接收到request事件的时候, 触发app(express)函数监听器。app函数会遍历自己的methods, if 传送来的请求get/post类型 和 pathname路径,来调取符合的子控制器。

客户端-----------request: get/post url----------->服务器

服务器------onrequest监听器触发(app函数)-------->遍历app内部集合methods[]--------->

if (请求get/post 和pathname 符合methods内部存储的子控制器)---------------->

运行这条子控制器--->

->读取mysql,

->调用【指定路径】视图(ejs引擎)的字符串内容

->组合mysql数据和模板引擎生成的字符串内容 , render (调取nodejs的write) 发送回浏览器。

原文地址:http://www.jianshu.com/p/a2dadf1546d6

posted @ 2014-12-16 18:39  芒果-node  阅读(3150)  评论(0编辑  收藏  举报