How to return value from mysql SELECT query in node.js

I'm still very new to Node.js and I am trying to understand how callbacks work. So here is my problem:

I should have added more code:

POST:

app.post('/register', function(req, res) { //get data from the request var data = { username: req.body.username, email: req.body.email, password: req.body.password }; function fetchID(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); }); } var user_id; fetchID(function(err, content) { if (err) { console.log(err); return next("Mysql error, check your query"); } else { user_id = content; console.log(user_id); //undefined } }); console.log(user_id); //undefined var payload = { iss: req.hostname, sub: user_id } console.log(payload.sub); //correct id }) 

GET:

 app.get('/todos', function(req, res) { if (!req.headers.authorization) { return res.status(401).send({ message: 'You are not authorized !' }); } var token = req.headers.authorization.split(' ')[1]; var payload = jwt.decode(token, "shhh.."); //additional level of security console.log('sub id is : ' + payload.sub); //undefined if (!payload.sub) { return res.status(401).send({ message: 'Authentication failed !' }); } }) 

I commented on each console.log to be more clear. I need to get the correct id when I check if (!payload.sub) in app.get ()

+5
source share
1 answer

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); // Do something with your error... } else { user_id = content; } }); 

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

+6
source

Source: https://habr.com/ru/post/1213844/


All Articles