Передать значение из функции в 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});
});
});