I had updated your code to make it work in my earlier post. Hope you're able to follow it well. However, dynamic content such as results retrieved from db are best handled using templates, such as jade
or ejs
.
I will refactor your code to demonstrate how we can do that in express using jade
template. I have stubbed a few things to make the demo work, you can skip/modify them as you like. :)
Stand alone script to handle /showGuides
request:
var fs = require('fs');
var util = require('util');
var path = require('path');
var http = require('http');
var express = require('express');
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// configure other middlewares you need
app.use(app.router);
process.on('uncaughtException', console.log);
var guides = {
process: function process(req, res, next) {
util.log('Received request to fetch guides');
guides.fetch(function (err, guides) {
req.guides = guides || [];
next(err);
});
},
fetch: function fetch(cb) {
pool.getConnection(function (err, connection) {
var sql = 'select * from guides;';
connection.query(sql, function (err, rows) {
cb(err, rows);
connection.end();
});
});
},
render: function render(req, res, next) {
res.locals.guides = req.guides;
res.render('guides');
},
errors: function errors(err, req, res, next) {
console.log(err);
res.locals.errmsg = err.message;
res.render('error');
}
};
app.get('/showGuides', guides.process, guides.render, guides.errors);
var server = http.createServer(app).listen(3000);
// dummy pool -- you don't need this
var pool = {
connection: {
query: function (query, cb) {
// dummy response -- simulate a db call
setTimeout(function () {
var dummies = [{
id: 1,
name: 'test',
lastName: 'test',
address: 'test',
phone: 1234
}, {
id: 2,
name: 'test2',
lastName: 'test2',
address: 'test2',
phone: 12345
}];
cb(null, dummies);
}, 500);
},
end: function () {
// nothing to do
}
},
getConnection: function (cb) {
cb(null, pool.connection);
}
};
Now we need to add some jade templates, namely guides.jade
, start.jade
, end.jade
and error.jade
. Add these files under dir views
.
views/guides.jade:
include start
table(border="1", cellspacing="0", cellpadding="5px", width="50%")
tr
th id
th name
th last name
th address
th phone
each row in guides
tr
td= row.id
td= row.name
td= row.lastName
td= row.address
td= row.phone
include end
views/start.jade
//- Contents from start.html
h3 Guides
views/end.jade
//- contents from end.html
p Guides data rendered.
views/error.jade
h3 Oops! An error occurred
p= errmsg
If you're new to jade, start with jade tutorial. Let me know if you're unable to follow anything in the code above.
Good Day!