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

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


                   });
                 };

                 User.get = function get(username, callback) {
                   mongodb.open(function(err, db) {
                     if (err) {
                       return callback(err);
                     }
                     // 读取 users 集合
                     db.collection('users', function(err, collection) {
                       if (err) {
                         mongodb.close();
                         return callback(err);
                       }
                       // 查找 name 属性为 username 的文档
                       collection.findOne({name: username}, function(err, doc) {
                         mongodb.close();
                         if (doc) {
                           // 封装文档为 User 对象
                           var user = new User(doc);
                           callback(err, user);
                         } else {
                           callback(err, null);
                         }
                       });
                     });
                   });
                 };
                 以上代码实现了两个接口,User.prototype.save 和 User.get,前者是对象实例
             的方法,用于将用户对象的数据保存到数据库中,后者是对象构造函数的方法,用于从数据
             库中查找指定的用户。
                 4. 视图交互
                 现在几乎已经万事俱备,只差视图的支持了。为了实现不同登录状态下页面呈现不同内
             容的功能,我们需要创建动态视图助手,通过它我们才能在视图中访问会话中的用户数据。
             同时为了显示错误和成功的信息,也要在动态视图助手中增加响应的函数。
                 打开 app.js,添加以下代码:

                 app.dynamicHelpers({
                   user: function(req, res) {
                     return req.session.user;
                   },
                   error: function(req, res) {
                     var err = req.flash('error');
   118   119   120   121   122   123   124   125   126   127   128