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
   85   86   87   88   89   90   91   92   93   94   95