I am stacked with a problem and I can't figure out how to solve it in a simple way, I have looked around how variable scopes work in Node js but still I think there is an easy way to solve my problem and I can't see that.
Here I am retrievering posts from a MongoDB, and I have to extract the title in order to create in the HTML page a "div" for each post, for doing that I'm using ejs and I have to pass my content to it. (I know I can also pass an array of titles and move the html code in the .ejs file for a more elegant code)
But muy problem is another, I use "var htmlposts" for storing the titles that I get from the database, but the variable declared out of the posts.each(...) method is not visible inside that function and I really can't understand how to instantiate that variable inside that method. (I can't move the variable inside id, otherwise I wouldn't be able to call it where I need it, i.e, in the res.render() method, and I cannot either call the res.render() method inside the function posts.each() because it would be called for each element in the collection posts).
Please help
// 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
});
});
});