Node.js nodejs中的异步处理问题

Node.js nodejs中的异步处理问题,node.js,express,Node.js,Express,我是新手。我正在创建一个基本的API来获取id记录。一切正常。它正在从数据库返回用户数据。但当我在同一个函数中使用password变量from response时,它给我空值,而我在响应中得到值。我认为这是异步问题,但我不知道如何解决它 这是API代码 var express = require('express'); var db = require('../db/database'); var bcrypt = require('bcrypt'); const router = expre

我是新手。我正在创建一个基本的API来获取id记录。一切正常。它正在从数据库返回用户数据。但当我在同一个函数中使用password变量from response时,它给我空值,而我在响应中得到值。我认为这是异步问题,但我不知道如何解决它

这是API代码

var express = require('express');
var db = require('../db/database');
var bcrypt = require('bcrypt');

const router = express.Router();

router.get("/:userId", (req, res, next) => {
    let uid = req.params.userId;

    db.query(`SELECT * FROM users WHERE u_id = ${uid}`, (err, data)=> {
        if(!err) {
            if(data && data.length > 0) {
                var message = '';
                if(data.u_password){
                    //var pass = data.u_password;

                    if(bcrypt.compare('123456', data.u_password)) {
                     // Passwords match
                        message = 'Passwords match';
                    } else {
                     // Passwords don't match
                        message = 'Passwords dont match';
                    }
                }
                res.status(200).json({
                    message:message,
                });
            } else {
                res.status(200).json({
                    message:"User Not found."
                });
            }
        } 
    });    
});
database.js

var mysql = require('mysql');

const pool = mysql.createPool({
            connectionLimit : 10,
            host: 'localhost',
            user: 'root',
            password: '',
            database: 'lost_and_found',
            debug    : false 
            });   

function executeQuery(sql, callback) {
    pool.getConnection((err,connection) => {
        if(err) {
            return callback(err, null);
        } else {
            if(connection) {
                connection.query(sql, function (error, results, fields) {
                connection.release();
                if (error) {
                    return callback(error, null);
                } 
                return callback(null, results);
                });
            }
        }
    });
}

function query(sql, callback) {    
    executeQuery(sql,function(err, data) {
        if(err) {
            return callback(err);
        }       
        callback(null, data);
    });
}   

module.exports = {
    query: query
} 
回应

{"message":""}

请更改
bcrypt。将
代码与以下代码进行比较。功能:

bcrypt.compare('123456', data.u_password, function(err, result) {
    if (err) {
        // Passwords don't match
        message = 'Passwords dont match';
    } else {
        // Passwords match
        message = 'Passwords match';
    }
    res.status(200).json({
        message:message,
    });
})
编辑1:请将方法更新为以下逻辑:

db.query(`SELECT * FROM users WHERE u_id = ${uid}`, (err, data) => {
    if (err) {
        throw err;
    }
    if (data && data.length > 0) {
        var message = '';
        if (data.u_password) {
            bcrypt.compare('123456', data.u_password, function (err, result) {
                if (err) {
                    // Passwords don't match
                    message = 'Passwords dont match';
                } else {
                    // Passwords match
                    message = 'Passwords match';
                }
                res.status(200).json({
                    message: message,
                });
            })
        }
        res.status(200).json({
            message: "User Not found."
        });
    }
    res.status(200).json({
        message: "User Not found."
    });
});  

如果您仍面临任何问题或答案对您有帮助,请告诉我,请接受答案始终给出相同结果“密码不匹配”。当我尝试console.log(data.u\u password)时,它给了我未定义的密码。如果
data.u\u password
未定义,则密码显然将与
123456
不匹配。确保data.u_password已定义data是API的响应,我想使用响应的u_password变量。但我认为bcrypt在API响应之前执行。请检查更新的答案