这可能是一个简单的问题,因为我不了解回调的概念(我以为我知道,但显然没有)。
我正在尝试从MySQL返回响应(除了使用nodeJS以外,几乎所有语言都可以轻松完成此操作):
我正在从路由文件中调用一个函数:
路线
const user = require('../models/Users');
router.post('/register', (req, res, next) => {
let newUser = {
username: req.body.username,
password: req.body.password
};
if(user.checkIfUserExists) {
// do something
}
});
这是另一个文件中的查询:
const mysql = require('../handlers/mysql');
const bcrypt = require('bcrypt-nodejs');
var User = {
checkIfUserExists: function(newUser, callback) {
mysql.query('SELECT * FROM users where Email like ?', [newUser.username], function(err, result) {
if(err) return callback(err);
callback(null, result > 0);
});
},
registerUser: function(newUser) {
mysql.query("INSERT INTO users (Email, Password) VALUES (?, ?)", [newUser.username, User.hashPassword(newUser.password)], function(err, results) {
if (err) throw err;
return true;
});
},
hashPassword: function(password) {
let salt = bcrypt.genSaltSync(10);
return bcrypt.hashSync(password, salt);
}
}
module.exports = User;
当然,registerUser
会发生同样的事情
答案 0 :(得分:7)
您忘了调用和处理回调。
user.checkIfUserExists(newUser, function(arg1, isUserExist) {
if (isUserExist) {
//user exist
}
});
答案 1 :(得分:0)
您没有使用回调。为此,请遵循以下代码。
`user.checkIfUserExists(newUser,(result)=>{
If(result){
//write your code
}
}`
答案 2 :(得分:-1)
许多人向您解释了问题。让我向您解释回调的概念。
回调是在函数完成其工作之后被调用的函数 例如,此功能
setTimeout(function(){
alert('Alert will be ran after 3 seconds');
},3000);
您可以打开开发人员模式(在浏览器中按f12并运行它)。您可以看到警报框将在3秒后显示。我可以解释这样的代码流程。
在您的代码中,您只是创建一个普通的新对象,它没有来自User对象的checkIfUserExists函数。您必须从User类创建用户。
回调函数给初学者带来了很多麻烦,这就是为什么在ES6 +(JavaScript版本6+)中。引入了class,async,await,使生活更轻松。