The above hbs file is not fetching data Here the whole code inside each block is not being displayed Here I'm not able to understand what's wrong cause it's not throwing any error And there's no problem while adding books, books are added in mongoDB. But from MongoDB not able to fetch data Help me with code
My app.js file:
const path = require("path");
const hbs = require("hbs");
const session = require('express-session'); //admin
const adminRoutes = require('../routes/admin');
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
mongoose.set('strictQuery', false);
const app = express();
const port = process.env.PORT || 3000;
//setting path
const viewpath = path.join(__dirname, "../templates/views");
const partialspath = path.join(__dirname, "../templates/partials");
app.set("view engine", "hbs");
app.set("partial engine", "hbs");
app.set("views", viewpath);
app.set("partials", partialspath);
hbs.registerPartials(partialspath);
app.use(bodyParser.json());
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: true }));
//Add Book
const db3 = mongoose.createConnection('mongodb://127.0.0.1:27017/Book');
const Book = require('./models/book');
db3.on('error', () => console.log("error in connection"));
db3.once('open', () => {console.log("connected successfully to Book database");});
app.post('/books', async (req, res) => {
const { skill, title, author, pages, link } = req.body;
const book = new Book({
skill,
title,
author,
pages,
link,
});
await book.save();
res.redirect('/admin/dashboard');
console.log("Book added by Admin");
});
//Fetch Book
app.get('/ubooks', (req, res) => {
Book.find({}, 'skill title author pages link', (err, books) => {
if (err) {
console.error(err);
console.log("hii err");
return res.status(500).send('Error fetching books from database');
}
console.log("hii");
res.render('ubooks', { books });
});
});
//This is my ubooks.hbs file where i want to display fetched data:
<html>
<body>
{{#each books}}
<div>
<h2>Skill: {{this.skill}}</h2>
<h2>Title: {{this.title}}</h2>
<p>Author: {{this.author}}</p>
<h2>Pages: {{this.pages}}</h2>
<h2>Link: {{this.link}}</h2>
</div>
{{/each}}
</body>
</html>````
mongoose
no longer supports callbacks for Model API methods.
Try with async await
:
app.get('/ubooks', async (req, res) => {
try {
const books = await Book.find({}, 'skill title author pages link').exec();
res.render('ubooks', { books });
} catch (err) {
console.error(err);
return res.status(500).send('Error fetching books from database');
}
});