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
               页面。
   127   128   129   130   131   132   133   134   135   136   137