gpt4 book ai didi

node.js - 如何从 Node.js 中的 mysql SELECT 查询返回值

转载 作者:行者123 更新时间:2023-11-29 17:01:22 24 4
gpt4 key购买 nike

我对 Node.js 还很陌生,我正在尝试了解回调是如何工作的。所以,这是我的问题:

我应该添加更多代码:

发布:

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

获取:

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 进行了注释,以使其更加清晰。当我检查 app.get() 中的 if (!payload.sub) 时,我需要获取正确的 id

最佳答案

你的两个函数应该是这样的 -

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

在回调函数中,返回的变量content将保存user_id的值。

编辑

我还没有解决您上面描述的确切问题。

但在下面的示例中,我已经表明,回调机制正在起作用 -

首先(创建表并插入一些虚拟数据)-

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 方法设置为 get 并在浏览器中进行了测试。

以下是在我的本地主机中测试的完整类 -

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 => 用户 ID 为 -1 并且http://127.0.0.1:1212/getuser?username=sham => 用户 ID 为 -2

希望这个代码示例能够帮助您理解node.js中的回调。

谢谢

关于node.js - 如何从 Node.js 中的 mysql SELECT 查询返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52220572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com