如何从node.js中的mysql select查询返回值

qyuhtwio  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(559)

我对node.js还很陌生,我正在努力理解回调是如何工作的。所以,我的问题是:
我应该写更多的代码:
职位:

  1. app.post('/register', function(req, res) {
  2. //get data from the request
  3. var data = {
  4. username: req.body.username,
  5. email: req.body.email,
  6. password: req.body.password
  7. };
  8. function fetchID(callback) {
  9. connection.query('SELECT id_user FROM USERS WHERE username = ?', data.username, function(err, rows) {
  10. if (err) {
  11. callback(err, null);
  12. } else
  13. callback(null, rows[0].id_user);
  14. });
  15. }
  16. var user_id;
  17. fetchID(function(err, content) {
  18. if (err) {
  19. console.log(err);
  20. return next("Mysql error, check your query");
  21. } else {
  22. user_id = content;
  23. console.log(user_id); //undefined
  24. }
  25. });
  26. console.log(user_id); //undefined
  27. var payload = {
  28. iss: req.hostname,
  29. sub: user_id
  30. }
  31. console.log(payload.sub); //correct id
  32. })

获取:

  1. app.get('/todos', function(req, res) {
  2. if (!req.headers.authorization) {
  3. return res.status(401).send({
  4. message: 'You are not authorized !'
  5. });
  6. }
  7. var token = req.headers.authorization.split(' ')[1];
  8. var payload = jwt.decode(token, "shhh..");
  9. //additional level of security
  10. console.log('sub id is : ' + payload.sub); //undefined
  11. if (!payload.sub) {
  12. return res.status(401).send({
  13. message: 'Authentication failed !'
  14. });
  15. }
  16. })

为了更清楚,我对每个console.log都做了注解。我需要得到正确的身份证,当我检查 if (!payload.sub) 在app.get()中

sbdsn5lh

sbdsn5lh1#

你的两个函数应该是-

  1. function fetchID(data, callback) {
  2. connection.query('SELECT id_user FROM USERS WHERE username = ?', data.username, function(err, rows) {
  3. if (err) {
  4. callback(err, null);
  5. } else
  6. callback(null, rows[0].id_user);
  7. });
  8. }

然后

  1. var user_id;
  2. fetchID(data, function(err, content) {
  3. if (err) {
  4. console.log(err);
  5. // Do something with your error...
  6. } else {
  7. user_id = content;
  8. }
  9. });

在回调函数中,返回的变量 content 将保留 user_id .
编辑
我没有像你上面描述的那样解决这个问题。
但在下面的示例中,我已经说明了回调机制是有效的-
首先(创建表并插入一些伪数据)-

  1. use test;
  2. create table users (id int(11) primary key,username varchar(100));
  3. insert into users values(1, "John");
  4. insert into users values(2, "Sham");

现在我已经把你的post方法作为get,并在浏览器中进行了测试。
下面是在我的localhost中测试的完整类-

  1. var application_root = __dirname,
  2. express = require("express"),
  3. mysql = require('mysql');
  4. var app = express();
  5. var connection = mysql.createConnection({
  6. host : 'localhost',
  7. user : 'root',
  8. password : 'admin',
  9. database: "test"
  10. });
  11. app.get('/getuser', function(req, res) {
  12. //get data from the request
  13. var data = {
  14. username: req.query.username
  15. };
  16. function fetchID(data, callback) {
  17. connection.query('SELECT id FROM users WHERE username = ?',
  18. data.username, function(err, rows) {
  19. if (err) {
  20. callback(err, null);
  21. } else
  22. callback(null, rows[0].id);
  23. });
  24. }
  25. var user_id;
  26. fetchID(data, function(err, content) {
  27. if (err) {
  28. console.log(err);
  29. res.send(err);
  30. // Do something with your error...
  31. } else {
  32. user_id = content;
  33. console.log(user_id);
  34. res.send("user id is -" + user_id);
  35. }
  36. });
  37. })
  38. 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中的回调。
谢谢

展开查看全部

相关问题