【问题标题】:Pass value from a function in node.js [duplicate]从node.js中的函数传递值[重复]
【发布时间】:2017-07-19 00:16:29
【问题描述】:

//这是我的模型

    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”已填充了值。但是我无法返回特定的值。我们该怎么做?

【问题讨论】:

  • 您需要阅读并理解我链接到的 QA 中的答案。如果你想用 Javascript 编码,现在有办法理解这种语言的基础。

标签: javascript node.js express ejs


【解决方案1】:

试试这个:

//型号

我将调用添加到回调中:

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

【讨论】:

    【解决方案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});
     });
    

    您还可以完善错误逻辑以使其健壮。

    【讨论】:

    • 一个小错误。if(!err) { console.log(resultArray);数组在这里为空。 @Rudra
    • 检查回调,如果它在被调用时有正确的数据。您应该尝试自己调试。
    • :谢谢它现在起作用了。
    猜你喜欢
    • 1970-01-01
    • 2023-01-26
    • 2018-01-13
    • 2019-06-28
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多