Your two functions should be something like:
function fetchID(data, callback) { connection.query('SELECT id_user FROM USERS WHERE username = ?', data.username, function(err, rows) { if (err) { callback(err, null); } else callback(null, rows[0].id_user); }); }
and then
var user_id; fetchID(data, function(err, content) { if (err) { console.log(err);
Here, in the callback function, the returned variable content will contain the value for user_id .
EDIT
I did not solve the exact problem as you described above.
But in the following example, I showed that the callback mechanism works -
First (creating a table and inserting some dummy data) -
use test; create table users (id int(11) primary key,username varchar(100)); insert into users values(1, "John"); insert into users values(2, "Sham");
Now I made my mail method as get and tested in the browser.
Below is the full class tested in my localhost -
var application_root = __dirname, express = require("express"), mysql = require('mysql'); var app = express(); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : 'admin', database: "test" }); app.get('/getuser', function(req, res) { //get data from the request var data = { username: req.query.username }; function fetchID(data, callback) { connection.query('SELECT id FROM users WHERE username = ?', data.username, function(err, rows) { if (err) { callback(err, null); } else callback(null, rows[0].id); }); } var user_id; fetchID(data, function(err, content) { if (err) { console.log(err); res.send(err); // Do something with your error... } else { user_id = content; console.log(user_id); res.send("user id is -" + user_id); } }); }) app.listen(1212);
Now these requests will produce this result - http://127.0.0.1:1212/getuser?username=john => user id is -1 and http://127.0.0.1:1212/getuser?username=sham => user id is -2
We hope this sample code helps you understand the callback in node.js.
thanks