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');