please have a look at the dbfn.js file
/*database function file;*/
var db = require('./connection');
function check_conn(){
if(db){
console.log('We are connected to Database server'.bgGreen);
return true;
}else{
console.log('We are not connected to DataBase server'.bgRed);
return false;
}
}
module.exports = {
testCon : function(){
if(check_conn() === true){
return 'We are connected to DB';
}else return 'We are not connected to DB';
},
get_user : function(){
db.query('SELECT * FROM users',function(err,results,fields){
if(err){
console.log(err)
return err;
}
if(results){
console.log(results);
return results;
}
console.log('nothing...');
});
}
};
Now, look at routes.js file
var db = require('./dbfn');
module.exports = function(app){
/*
Routing starts here
*/
//root route
app.get('/', function(req, res){
res.render('index.ejs');
});
//test route
app.get('/test',function(req,res){
var x = db.get_user();
console.log(x);
res.writeHead(200, {'Content-Type': 'text/json'});
res.json(x);
});
//default it should stay at bottom
app.get('*',function (req, res) {
//res.redirect('/');
res.send(404);
});
}
console.log on dbfn file writes full object from MySQL database but when I call it on routes.js file as var x it null I really don't understands how actually I can overcome with that. Yes, I am new student to NodeJs
Thanks.
You can't return from an asynchronous call inside a synchronous function. Instead, you need to pass a callback to get_user()
like this:
dbfn.js
var db = require('./connection');
function check_conn(){
if(db){
console.log('We are connected to Database server'.bgGreen);
return true;
}else{
console.log('We are not connected to DataBase server'.bgRed);
return false;
}
}
module.exports = {
testCon : function(){
if(check_conn() === true){
return 'We are connected to DB';
}else return 'We are not connected to DB';
},
get_user : function(cb){
db.query('SELECT * FROM users',function(err,results,fields){
if(err){
console.log(err)
cb(err);
}
if(results){
console.log(results);
cb(null, results);
}
console.log('nothing...');
});
}
};
routes.js
var db = require('./dbfn');
module.exports = function(app){
/*
Routing starts here
*/
//root route
app.get('/', function(req, res){
res.render('index.ejs');
});
//test route
app.get('/test',function(req,res){
db.get_user(function(err, response) {
if(err) {
// handle error
}
else {
var x = response;
console.log(x);
res.writeHead(200, {'Content-Type': 'text/json'});
res.json(x);
}
});
});
//default it should stay at bottom
app.get('*',function (req, res) {
//res.redirect('/');
res.send(404);
});
}
Now, the code within the callback will only fire once the DB query has completed.
Update your query function with a callback:
get_user : function(callback){
db.query('SELECT * FROM users',function(err,results,fields){
if(err){
console.log(err)
callback(err);
}
if(results){
console.log(results);
callback(results;
}
console.log('nothing...');
});
}
Then next in your routes check the results in the callback function
app.get('/test',function(req,res){
db.get_user(function(result){
console.log(result);
});
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.