I'm having trouble figuring out how can I retrieve data in mongodb and fetch it in an html/ejs file. in html/ejs file there is one button where if the user click it, it will display all data in database collection mongodb.
I found some questions similar to my question but it doesn't answer my question. I am still new at node js and mongodb so I don't really have an Idea on how can I achieve my goal.
this is my index.js
var express = require("express");
var app = express();
app.set('view engine', 'ejs')
//var hostname = '127.0.0.1';
var port = 3000;
var mongoose = require("mongoose");
app.set('view engine','jade');
mongoose.Promise = global.Promise;
mongoose.connect("mongodb://localhost:27017/commuters", {useNewUrlParser: true});
app.use('/gui', express.static('gui'));
//use to link static file in the folder named public
var nameSchema = new mongoose.Schema({
route : String,
origin : String,
destination : String,
estimatedTimeOfArrival : String,
date : String,
time : String
},
{
collection : 'boardingAlight'
});
//collection is the name of collection that you created in the same database name above
var User = mongoose.model("User", nameSchema);
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true, useNewUrlParser : true }));
app.use("/", (req, res) => {
res.sendFile(__dirname + "/gui/index.html");
});
//FOR PORT CONNECTION
//localhost:3000
app.listen(port, () => {
console.log("Server listening on port " + port);
});
once I created ejs file with a button, I need to display the all the data in a table. Thank you!
Try the following code:
app.js
var express = require("express"),
app = express(),
bodyparser = require("body-parser"),
mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/commuters", {useNewUrlParser: true});
app.use(bodyparser.urlencoded({ extended: true }));
app.set("view engine", "ejs");
var schema = new mongoose.Schema({
route : String,
origin : String,
destination : String,
estimatedTimeOfArrival : String,
date : String,
time : String
})
var detailsModel = mongoose.model("detailsModel", schema);
app.get("/", function (req, res) {
res.render("index",{ details: null })
})
app.get("/getdetails", function (req, res) {
detailsModel.find({}, function (err, allDetails) {
if (err) {
console.log(err);
} else {
res.render("index", { details: allDetails })
}
})
})
app.listen(3000, "localhost", function () {
console.log("server has started");
})
index.ejs
<div>
<a href="/getdetails">Get Details</a>
</div>
<hr>
<% if(details!=null) { %>
<table>
<tr>
<th>Route</th>
<th>origin </th>
<th>Destination</th>
<th>EstimatedTimeOfArrival </th>
<th>Date </th>
<th>Time</th>
</tr>
<% details.forEach(function(item){ %>
<tr>
<td><%= item.route%></td>
<td><%= item.origin %></td>
<td><%= item.destination%></td>
<td><%= item.estimatedTimeOfArrival %></td>
<td><%= item.date%></td>
<td><%= item.time%></td>
</tr>
<% }) %>
</table>
<% } %>
If you want to retrieve data from db and want to send it to ejs then you can do it like this:
app.get('/',(req,res,next) =>{
//Here fetch data using mongoose query like
User.find({}, function(err, users) {
if (err) throw err;
// object of all the users
res.render('index',{users:users});
});
On ejs file:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to my blog</title>
</head>
<body>
<h1>Users</h1>
<p><%=users %></p>
</body>
</html>
What you send in object in res.render will be available on your index.ejs file to use.Now you can display data as you want
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With