我似乎无法理解Mongoose的“findOne”

时间:2016-05-20 21:22:17

标签: javascript mongodb model-view-controller mean

好的,所以我有这个函数来获取一个带有来自mongodb db的id的博客文章。

 exports.blogPostFirst = function(req, res, next) {

     BlogPost.findOne({    
         _id: '1'
     }, function(err, e) {
         if (err) {
             return next(err);
         } else {
             req.content = e;
             next();
         }
     });

     res.render('blogPage', {
         title: req.content.title,
         content: req.content.html_content
     })
 };

现在由于某种原因,_id : '1'部分不起作用,_id字段是一个字符串。

当我改为给出_id参数中一个元素from的一个值时,例如我在我的路线'route :: param'

我将函数置于第4个参数'id'之上,并将其作为“param”参数传递,它可以正常工作,但是我无法手动设置“_id”字段。< / p>

BlogPost个对象如下:

var BlogPost = require('mongoose').model('Post');

mongoose架构是:

Schema = mongoose.Schema;

var PostSchema = new Schema({
    title: String,
    html_content: String,
    _id: String,
});

mongoose.model('Post', PostSchema);

1 个答案:

答案 0 :(得分:0)

好的,所以,经过几分钟的清晰思考后,我看到了我的问题。 我写的时候:

BlogPost.findOne({    
     _id: '1'
 }, function(err, e) {
     if (err) {
         return next(err);
     } else {
         req.content = e;
         next();
     }
 });

我将请求的.content参数设置为等于“e”(我的findOne查询的结果),但是在findOne函数“完成”后,req.content不会保持它的值req.content,而不仅仅存在于该函数的环境中,所以我应该像这样调用函数:

exports.blogPostFirst = function(req, res, next) {

     BlogPost.findOne({    
         _id: '1'
     }, function(err, e) {
         if (err) {
             return next(err);
         } else {
             req.content = e;
             next();
              res.render('blogPage', {
         title: req.content.title,
         content: req.content.html_content
     })
         }
     }); 
 };

令我感到困惑的是,当我使用从URL传递的参数时,它一直有效...或者我找到了修复但我修复的理由很糟糕。无论如何,我有我的答案,但我不能删除它,所以我将把它留在这里