Page 132 - Node.js开发指南
P. 132
5.7 发表微博 125
// 查找 user 属性为 username 的文档,如果 username 是 null 则匹配全部
1
var query = {};
if (username) {
query.user = username;
}
collection.find(query).sort({time: -1}).toArray(function(err, docs) { 2
mongodb.close();
if (err) {
callback(err, null);
}
// 封装 posts 为 Post 对象
3
var posts = [];
docs.forEach(function(doc, index) {
var post = new Post(doc.user, doc.post, doc.time);
posts.push(post);
}); 4
callback(null, posts);
});
});
});
};
5
在后面我们会通过控制器调用这个模块。
5.7.2 发表微博
6
我们曾经约定通过 POST 方法访问 /post 以发表微博,现在让我们来实现这个控制器。
在 routes/index.js 中添加下面的代码:
app.post('/post', checkLogin);
app.post('/post', function(req, res) { 7
var currentUser = req.session.user;
var post = new Post(currentUser.name, req.body.post);
post.save(function(err) {
if (err) {
req.flash('error', err); 8
return res.redirect('/');
}
req.flash('success', '发表成功');
res.redirect('/u/' + currentUser.name);
9
});
});
这段代码通过 req.session.user 获取当前用户信息,从 req.body.post 获取用
户发表的内容,建立 Post 对象,调用 save() 方法存储信息,最后将用户重定向到用户
10
页面。