как вернуть результат из модели в контроллер в nodejs - PullRequest
1 голос
/ 21 января 2020

Я работаю над node js в первый раз. Мой nodejs проект выполнен в стиле MVC, и я делаю Ajax запрос на вход в систему. Но я не получаю данные из модели .. Вот код ....

Контроллер / 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;
            }
      });
    }
  });
}

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Контроллер / 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)
            }
    ......
}

Вы также можете использовать обещание вместо функции обратного вызова, как

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))

Узнайте больше и больше о функции обратного вызова и обещаниях.

0 голосов
/ 21 января 2020

поскольку я вижу, что вы передаете функцию обратного вызова в функции входа в систему, но внутри определения функции функции входа в систему вы не вызываете обратный вызов и не передаёте ему данные.

Вы должны будете что-то сделать как это.

`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);
        }
      });
    }
  });
};`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...