准备工作
MVC(模型—视图—控制器)
l 模型是对象及其数据结构的实现,通常包含数据库操作
l 视图表示用户界面,在网站中通常就是HTML的组织结构
l 控制器用于处理用户请求和数据流、复杂模型,将输出传递给视图
我们称PHP/ASP/JSP为“模板为中心的架构”
特性 | 模板为中心架构 | MVC架构 |
页面产生方式 | 执行并替换标签中的语句 | 由模板引擎生成HTML页面 |
路径解析 | 对应到文件系统 | 由控制器定义 |
数据访问 | 通过SQL语句查询或访问文件系统 | 对象关系模型 |
架构中心 | 脚本语言是静态HTTP服务器的扩展 | 静态服务器是脚本语言的补充 |
适用范围 | 小规模网站 | 大规模网站 |
学习难度 | 容易 | 较难 |
这两种架构都出自原始的CGI,但不同之处是前者走了一条粗话扩张的发展路线,由于易学易用,在几年前应用较广,而随着互联网的扩大,后者优势逐渐体现,目前已成为主流。
Node.js本质上和Perl工C++一样,都可以作为CGI扩展被调用,但它还可以跳过HTTP服务器,因为它本身就是。传统架构中的http服务器角色会由Apache NginxIIS之类的软件来担任,而Node.js不需要。Node.js提供了http模块,它是由C++实现的,性能可靠,可以直接应用到生产环境。
express框架
express(http://expressjs.com/)除了为http模块提供了更高层的接口外,还实现了许多功能:
- 路由控制
- 模板解析支持
- 动态视图
- 用户会话
- CSRF保护
- 静态文件服务
- 错误控制器
- 访问日志
- 缓存
- 插件支持
需要指出的是,Express不是一个无所不包的一能框架,像Rails或Django那样实现了模板引擎甚至ORM。它只是一个轻量级的Web框架,多数功能只是对HTTP协议中常用操作的封装,更多的功能需要插件或者整合其他模块来完成。
下面用Express重新实现前面的例子:
var express =require(“express”);
var app =express.createServer();
app.use(express.bodyParser());
app.all('’,function(req,res){
res.send(req.body.title+req.body.text)
});
app.listen(3000);
可以看到,我们不需要手动编写req的事件监听器了,只需要加载express.bodyParser()就能直接通过req.body获取POST的数据了。
快速开始
首先我们要安装Express。如果一个包是某个工程的依赖,那么我们需要在工程的目录下使用本地模式安装这个,如果要通过命令行调用这个包中的命令,则需要全局模式安装,因此按钮理说我们使用本地模式安装Express即可。但是Express像很多框架一样都提供了Quick Start工具,这个工具的功能通常是建立一个网站最小的基础框架,在此基础上完成开发。当然你可以完全自己动手,但我还是推荐使用工具更快速地建立网站。为了使用这个工具,我们需要全局模式安装Express,因为只有这样我们才能在命令中使用它。npminstall – g express (好像新版的安装不是这样的啦,我做实验时用的安装是npm install –g express-generator)
建立工程
通过以下命令建立网站基本结构.Express在初始化一个项目的时候需要指定模板引擎,默认支持Jade和ejs,为了降低学习难度我们推荐使用ejs,同时暂时不添加CSS引擎和会话支持。
express –t ejs microblog (我做实验用时node v0.10.28,如果使用ejs则命名行中使用express –e )
启动服务器使用在microblog目录下npm start 在地址栏里输入http://127.0.0.1:3000可以在浏览器上看到Express welcome to express。百度了一下,网上有如下解释:http://www.myexception.cn/javascript/1663199.html
由Express创建的网站架构如下图:
这是一个典型的MVC架构,浏览器发起请求,由路由控制器接受,根据不同的路径定向到不同的控制器。控制器处理用户的具体请求,可能会访问数据库中的对象,即模型部分。控制器还要访问模板引擎,生成视图的HTML,最后再由控制器返回给浏览器完成一次请求