我遇到了一个问题,我无法弄清楚如何以一种简单的方式解决它,我已经了解了变量范围在Node js中是如何工作的,但我认为有一种简单的方法可以解决我的问题问题,我无法看到。
这里我正在检索来自MongoDB的帖子,我必须提取标题,以便在HTML页面中创建一个" div"对于每个帖子,为了做到这一点,我使用ejs,我必须将我的内容传递给它。 (我知道我也可以传递一系列标题并在.ejs文件中移动html代码以获得更优雅的代码)
但是muy问题是另一个问题, 我用" var htmlposts"用于存储我从数据库中获取的标题,但是在posts.each(...)方法中声明的变量在该函数内部是不可见的,我实际上无法理解如何在该方法中实例化该变量。 (我无法在id中移动变量,否则我无法在需要它的地方调用它,即在res.render()方法中,我无法调用res.render函数posts.each()内部的()方法,因为它将为集合帖子中的每个元素调用。)
请帮忙
// post page
app.get('/posts', function(req, res) {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
//Find each single element
var posts = db.collection("posts").find();
var htmlposts;
//For each element extract the title and body
posts.each(function(err, docs, callback){
if (docs != null){
console.log("The title is: " + docs.title);
console.log("The text is: " + docs.body);
htmlposts = "<div class=\"row\"><div class=\"col-1\"> \
<button>CHAT NOW</button></div><div class=\"col-8\">" + docs.title + "</div> \
<div class=\"col-2\">Statistics</div></div>";
}
});
db.close();
//This will print undefined, and that's the problem
console.log(htmlposts);
res.render('pages/posts', {
page_name: 'posts',
page_title: 'All Posts | ChatWhatHappened',
page_posts: htmlposts
});
});
});