从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”已填充值。但是我没有能够返回特定的价值。我们可以做到这一点?
使用callback函数来返回数据。
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}); });
您也可以抛光错误逻辑,使其强大。
尝试这个:
//该模型
我添加了对callback的调用:
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个参数,最后一个是要执行的callback:
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}); }); });