2012-07-27 61 views
1

让我来重述一下我的问题。我如何获取数组中返回的数据进行渲染。 (我用把手)mongodb从数组渲染?

的代码:

//http verbs 
module.exports = { 
    get: function(req, res) { 
     gm(req.url); 
     app.set('view engine', 'hbs'); 

     //session check 

     if (session checks out<-not actual code){ 

      //get mongoose data here 
      var bmdata = bmquery.execFind(function(err, docs){ 
       console.log(docs); 
       var model = { 
        layout:'blog.hbs', 
        BlogModel: docs, 
       }; 
      //render page 
      res.render('blog', model); 
      }); 
     } 

     else { 
      console.log('illegal user'); 
      console.log('redirection in progress'); 
      res.redirect('/login'); 
     } 
    } 

}; 

文档的的console.log回来以阵列像这样: [{文献1},{文献2}]

你也可以动态地做到这一点,所以我不必把阵列的位置。

我的车把上看起来是这样的:

{{BlogModel[0].title}} 
{{BlogModel[0].content}} 
{{BlogModel[1].title}} 
{{BlogModel[1].content}} 

的问题 数据回来在一个阵列,我不能让它动态地或全部地渲染。

+0

你会更好地学习JavaScript。似乎你不知道JavaScript的范围和异步性质。 你也应该阅读http://expressjs.com的文档。 – InspiredJW 2012-07-27 11:51:31

+0

对不起,我说得不好,我修好了。是的,我知道范围是什么,并且之前询问我是否可以将生成的变量从范围中传递出去。 (我不能):) – lostAstronaut 2012-07-27 20:31:25

回答

1
var BlogModel = mongoose.model('blogmodel', BlogPost, 'blogmodel'); 
var bms = BlogModel.find({ "date" : { $gte : new Date("2011-01-01T00:00:00Z")}}).limit(1); 

module.exports = { 
    get: function(req, res) { 
     //ExecFind is asnychornous, so you need to wait to get the data to render it. 
     bms.execFind(function(err, docs) { 
     console.log(docs); 
     var model = { 
      layout:'blog.hbs', 
      BlogModel: docs 
     }; 
     res.render('blog', model); 
     }); 
    } 
}; 

而且,这应该是在你的应用程序的配置,在应用

app.set('view engine', 'hbs'); 

正如有人说,你应该学会如何处理节点的ASYN性质模块上没有搁浅并多了解一些回调的概念。

+0

我更新了我的代码,它的工作原理如果我的模型变量中有文档[0]或1,但它不会一次加载多个数组值,我希望它加载大约5。 – lostAstronaut 2012-07-27 20:30:13

+0

.limit(1); < - 那。将其更改为5 – Bruno 2012-08-06 14:10:03