如何从node.js中的mysql SELECT查询中返回一个值

我还是很新的Node.js,我试图了解如何callback工作。 所以,这是我的问题:

我应该把更多的代码:

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 !' }); } }) 

我评论每个console.log更清晰。 我需要得到正确的id当我检查app.get()中的if (!payload.sub) payload.sub)

你的两个职能应该是像 –

 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); }); } 

接着

 var user_id; fetchID(data, function(err, content) { if (err) { console.log(err); // Do something with your error... } else { user_id = content; } }); 

在callback函数中,返回的variablescontent将保存user_id的值。

编辑

我没有解决上述的确切问题。

但在下面的例子中,我已经表明,callback机制正在工作 –

首先(表创build并插入一些虚拟数据) –

 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"); 

现在我已经让你的post方法在浏览器中得到和testing。

以下是在我的本地主机testing完整的类 –

 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); 

现在这些请求将产生这个输出 – http://127.0.0.1:1212/getuser?username=john => user id is -1http://127.0.0.1:1212/getuser?username=sham => user id is -2

希望这个代码示例将帮助您了解node.js中的callback。

谢谢