Node.js nodejs中的异步处理问题
我是新手。我正在创建一个基本的API来获取id记录。一切正常。它正在从数据库返回用户数据。但当我在同一个函数中使用password变量from response时,它给我空值,而我在响应中得到值。我认为这是异步问题,但我不知道如何解决它 这是API代码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
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响应之前执行。请检查更新的答案