Page 117 - Node.js开发指南
P. 117

110  第 5 章  使用 Node.js 进行 Web 开发


                 以上代码通过 module.exports 输出了创建的数据库连接,在后面的小节中我们会用
             到这个模块。由于模块只会被加载一次,以后我们在其他文件中使用时均为这一个实例。

             5.6.2  会话支持

                 在完成用户注册和登录功能之前,我们需要先了解会话的概念。会话是一种持久的网络
             协议,用于完成服务器和客户端之间的一些交互行为。会话是一个比连接粒度更大的概念,
             一次会话可能包含多次连接,每次连接都被认为是会话的一次操作。在网络应用开发中,有
             必要实现会话以帮助用户交互。例如网上购物的场景,用户浏览了多个页面,购买了一些物
             品,这些请求在多次连接中完成。许多应用层网络协议都是由会话支持的,如 FTP、Telnet 等,
             而 HTTP 协议是无状态的,本身不支持会话,因此在没有额外手段的帮助下,前面场景中服
             务器不知道用户购买了什么。
                 为了在无状态的 HTTP 协议之上实现会话,Cookie 诞生了。Cookie 是一些存储在客户
             端的信息,每次连接的时候由浏览器向服务器递交,服务器也向浏览器发起存储 Cookie 的
             请求,依靠这样的手段服务器可以识别客户端。我们通常意义上的 HTTP 会话功能就是这样
             实现的。具体来说,浏览器首次向服务器发起请求时,服务器生成一个唯一标识符并发送给
             客户端浏览器,浏览器将这个唯一标识符存储在 Cookie 中,以后每次再发起请求,客户端
             浏览器都会向服务器传送这个唯一标识符,服务器通过这个唯一标识符来识别用户。
                 对于开发者来说,我们无须关心浏览器端的存储,需要关注的仅仅是如何通过这个唯一
             标识符来识别用户。很多服务端脚本语言都有会话功能,如 PHP,把每个唯一标识符存储到
             文件中。Express 也提供了会话中间件,默认情况下是把用户信息存储在内存中,但我们既
             然已经有了 MongoDB,不妨把会话信息存储在数据库中,便于持久维护。为了使用这一功
             能,我们首先要获得一个叫做 connect-mongo 的模块,在 package.json 中添加一行代码:

                 {
                     "name": "microblog"
                   , "version": "0.0.1"
                   , "private": true
                   , "dependencies": {
                       "express": "2.5.8"
                     , "ejs": ">= 0.0.1"
                     , "connect-mongo": ">= 0.1.7"
                     , "mongodb": ">= 0.9.9"
                   }
                 }
                 运行 npm install 获得模块。然后打开 app.js,添加以下内容:


                 var MongoStore = require('connect-mongo');
                 var settings = require('../settings');
   112   113   114   115   116   117   118   119   120   121   122