You are passing user.username in callback. Instead you should pass user object. Edit: You should invoke the callback only after the query is executed.
function findByUsername(username, fn) {
var user = [];
connection.query('SELECT * FROM Users WHERE username = ?', [username], function (err, rows) {
//console.dir(rows);
if (err != null) {
//res.end("Query error:" + err);
console.log("Query error:" + err);
} else {
for (var i = 0; i < rows.length; i++) {
var myRows = rows[i];
user.push(myRows);
};
}
console.log(user);
console.log(user.username);
if (user.username) {
return fn(null, user);
} else {
return fn(null, null);
}
});
}