我是第一次使用node js。我的nodejs项目是MVC风格,正在执行Ajax登录请求。但是我没有从模型中获取数据...这是代码....
Controller / Auth.js
var data = req.body;
Auth_model.login(data, function(err,result){
if(!result){
response = {
error:true,
message : "Username or Password is wrong."
};
res.send(JSON.stringify(response));
}else{
response = {
error:false,
message : "Logged in Successfully."
};
// console.log(result);
res.send(JSON.stringify(response));
}
});
});
模型/ Auth_model.js
module.exports.login = function(data, callback){
var email = data.email;
var password = data.password;
var sql = 'SELECT * FROM `users` WHERE email='+mysql.escape(email);
db.query(sql, callback,function (err, result, fields) {
if (result) {
bcrypt.compare(password,result[0].password, function(err, result) {
if(result){
return result;
}else{
return err;
}
});
}
});
}
[我看到您正在登录函数中传递回调函数,但是在登录函数的函数定义内部传递的是,您没有调用回调并将数据传递给它。
您将必须执行类似的操作。
`module.exports.login = function(data, callback) {
var email = data.email;
var password = data.password;
var sql = "SELECT * FROM `users` WHERE email=" + mysql.escape(email);
db.query(sql, callback, function(err, result, fields) {
if (result) {
bcrypt.compare(password, result[0].password, function(err, result) {
if (result) {
return callback(null, result);
} else {
return callback(err, null);
}
});
}
});
};`
Controller / Auth.js
var data = req.body;
// here you are passing your callback function as second argument
// So, you can use it in your login model when you get your response
Auth_model.login(data, function(err,result){
.........
}
模型/ Auth_model.js
module.exports.login = function(data, callback){
.......
if(result){
// use your callback function pass error : null and result:result
callback(null,result);
}else{
callback(err,null)
}
......
}
您也可以使用promise而不是使用类似的回调函数>
module.exports.login = (data) = new Promise(function(resolve, reject) { ....... if(result){ // use your callback function pass error : null and result:result resolve(result); }else{ reject(err); } ...... }); // use it like : login(data).then(result=>console.log(result)).catch(err=>console.log(err))
了解有关回调函数和promise的更多信息。