如何将结果从模型返回到nodejs中的控制器

问题描述 投票:0回答:1

我是第一次使用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;
            }
      });
    }
  });
}
node.js ajax model-view-controller
1个回答
0
投票

[我看到您正在登录函数中传递回调函数,但是在登录函数的函数定义内部传递的是,您没有调用回调并将数据传递给它。

您将必须执行类似的操作。

`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);
        }
      });
    }
  });
};`

0
投票

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的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.