如何从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 -1
和http://127.0.0.1:1212/getuser?username=sham
=> user id is -2
希望这个代码示例将帮助您了解node.js中的callback。
谢谢