# Express routing with a login action using SQLite

I'm new to Express and SQL, so I don't know the conventional ways of combining the two. Right now I have done it the following way:

app.get('/login', function (req, res) {
});

app.get('/home', function (req, res) {
res.render('home');
});

db = new sqlite3.Database(file);
db.serialize(function () {
[...]
db.all(query, function (err, rows) {
if(rows.length == 1) {
[...]
res.render('home', {
});
}
else {
});
}
});
});
db.close();
});


However, I feel like the routing should be separated from the database stuff. What should I do different? Or is this normal?

For larger projects this can get very complicated and nasty. You can refactor the db access into functions that take a callback as a parameter. Example:

// db_helper.js
module.exports.isUserAuthenticated = function(query, callback) {
[db code here]
callback(err, rows);
};


And then in your routes file:

// app.js
var db_helper = require('./path/to/db_helper.js');

....

var query = [parse from request object]
db_helper.isUserAuthenticated(query, function(err, rows) {
if (rows.length == 1) {
[...]
res.render(...);
} else {
[...]
res.render(...);
}
});
});


Node-style callbacks typically have an error as the first parameter (null if there was no error), and associated data in other parameters.

Nesting callbacks can be a pain if this gets more complicated, so I suggest you look into Promises or async

• You're welcome. I highly suggest looking into async since it can streamline your db_helper.js a lot. – omgimanerd Jul 7 '17 at 19:52