Page 90 - Node.js开发指南
P. 90
5.1 准备工作 83
这种差别可能会让你大吃一惊,PHP 的实现要比Node.js容易得多。Node.js 完成这样一 1
个简单任务竟然如此复杂:你需要先创建一个 http 的实例,在其请求处理函数中手动编写
req 对象的事件监听器。当客户端数据到达时,将 POST 数据暂存在闭包的变量中,直到 end
事件触发,解析 POST 请求,处理后返回客户端。
其实这个比较是不公平的,PHP 之所以显得简单并不是因为它没有做这些事,而是因为 2
PHP 已经将这些工作完全封装好了,只提供了一个高层的接口,而 Node.js 的 http 模块提
供的是底层的接口,尽管使用起来复杂,却可以让我们对 HTTP 协议的理解更加清晰。
但是等等,我们并不是为了理解 HTTP 协议才来使用 Node.js 的,作为 Web 应用开发者,
我们不需要知道实现的细节,更不想与这些细节纠缠从而降低开发效率。难道 Node.js 的抽 3
象如此之差,把不该有的细节都暴露给了开发者吗?
实际上,Node.js 虽然提供了 http 模块,却不是让你直接用这个模块进行 Web 开发的。
http 模块仅仅是一个 HTTP 服务器内核的封装,你可以用它做任何 HTTP 服务器能做的事 4
情,不仅仅是做一个网站,甚至实现一个 HTTP 代理服务器都行。你如果想用它直接开发网
站,那么就必须手动实现所有的东西了,小到一个 POST 请求,大到 Cookie、会话的管理。
当你用这种方式建成一个网站的时候,你就几乎已经做好了一个完整的框架了。
5
5.1.2 Express 框架
npm 提供了大量的第三方模块,其中不乏许多 Web 框架,我们没有必要重复发明轮子,
因而选择使用 Express 作为开发框架,因为它是目前最稳定、使用最广泛,而且 Node.js 官 6
方推荐的唯一一个 Web 开发框架。
Express ( http://expressjs.com/ ) 除了为 http 模块提供了更高层的接口外,还实现了
许多功能,其中包括:
路由控制; 7
模板解析支持;
动态视图;
用户会话;
8
CSRF 保护;
静态文件服务;
错误控制器;
访问日志; 9
缓存;
插件支持。
需要指出的是,Express 不是一个无所不包的全能框架,像 Rails 或 Django 那样实现了
模板引擎甚至 ORM (Object Relation Model,对象关系模型)。它只是一个轻量级的 Web 框 10