Передать значение из функции в node.js

// Это мои модели

    module.exports.show_deatils=function(req,res,callback){

      var resultArray=[];
      mongo.connect(url,function(err,db){
        assert.equal(null,err);
        var cursor=db.collection('users').find();
        cursor.forEach(function(doc,err){
          assert.equal(null,err);
          resultArray.push(doc);
          console.log("came inside the function")
           return resultArray;


        });

    });

    }

// Это мои маршруты

 router.get('/restful', function(req, res){
console.log("before");
  User.show_deatils(function(req,res){
console.log(resultArray);
    req.session.resultArray=resultArray;


  });

    res.render('restful',{items:req.session.resultArray});
 });

// Здесь я вызываю функцию из маршрутов к моделям (show_details). Проблема, с которой я сталкиваюсь, заключается в том, что я вызываю функцию. Вызывается метод. Массив "resultArray" заполняется значениями. Но я не удалось вернуть конкретное значение. Как мы можем это сделать?

2 ответа

Решение

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

module.exports.show_deatils=function(req,res,callback){
      var resultArray=[];
      mongo.connect(url,function(err,db){
        assert.equal(null,err);
        var cursor=db.collection('users').find();
        cursor.forEach(function(doc,err){
          assert.equal(null,err);
          resultArray.push(doc);
          console.log("came inside the function")

        });  
        callback(null, resultArray);  
    });    
    }

=======================

router.get('/restful', function(req, res){
console.log("before");
  User.show_deatils(req, res, function(err, resultArray){
   if(!err) {
    console.log(resultArray);
    req.session.resultArray=resultArray;
   }
  });    
    res.render('restful',{items:req.session.resultArray});
 });

Вы также можете отшлифовать логику ошибки, чтобы сделать ее устойчивой.

Попробуй это:

//Модель

Я добавил вызов к обратному вызову:

module.exports.show_deatils=function(req,res,callback){

  var resultArray=[];
  mongo.connect(url,function(err,db){
      assert.equal(null,err);
      var cursor=db.collection('users').find();
      cursor.forEach(function(doc,err){
          assert.equal(null,err);
          resultArray.push(doc);
          console.log("came inside the function")
          return resultArray;
    });

    //now call the callback <----
    callback(resultArray);

});

}

// Маршруты

User.show_details должен принимать 3 параметра, последний из которых является обратным вызовом для выполнения:

 router.get('/restful', function(req, res){
    console.log("before");
    User.show_deatils(req, res, function(resultArray){
            console.log(resultArray);
            req.session.resultArray=resultArray;
            res.render('restful',{items:req.session.resultArray});
        });
 });
Другие вопросы по тегам