我有一个函数getthem(),它检查mongo db的列表并返回name,streamurl。
我将那些作为var stream传递给渲染/ dashboard页面的renderme。
我的问题是我得到了console.log(" END OF FIND:" + JSON.stringify(stream))
显示我的测试输入,但没有任何东西进入渲染。
即时使用ejs进行渲染。如何将结果传递给页面?
router.get('/dashboard', function (req, res) {
var foo = getthem();
function getthem() {
var group = "tesint";
console.log('geting for group : ' + group);
var mdlListings = require('../models/listings.js');
var myresult = "tet";
mdlListings.find({}, "name streamurl", function (err, data) {
if (err) {
console.error(err);
return;
}
if (data === null) {
console.log("No results");
return;
}
var stream = { };
data.forEach(function (streams) {
console.log("Got " + streams.name + " " + streams.streamurl);
stream[streams.name] = streams.streamurl;
// stream += 'name: '+streams.name+'},{streamurl: '+streams.streamurl;
// console.log("stram arry "+stream[streams.name] )
console.log("END OF FIND:"+JSON.stringify(stream))
}, renderme(stream));
// console.log("Result:", votes);
//var myresult = Object.keys(stream).map(function (name) {
// return { name: name, url: stream[name] };
//})
console.log("before return stream "+stream);
return stream;
});
}
function renderme(resa) {
console.log("RESA"+JSON.stringify(resa))
var resa = JSON.stringify(resa);
res.render('dashboard', {
title: 'Dashboard',
user: req.user,
listing: resa
}
)
}
答案 0 :(得分:0)
您将renderme(stream)
的结果作为第二个参数传递给forEach()
。然后在调用renderme(stream)
回调之前立即评估forEach()
,此时stream
仍为空对象。我的猜测是你想要这样的东西:
data.forEach(function (streams) {
console.log("Got " + streams.name + " " + streams.streamurl);
stream[streams.name] = streams.streamurl;
console.log("END OF FIND:"+JSON.stringify(stream))
});
renderme(stream);
答案 1 :(得分:-1)
实际上我想我为什么要通过这个功能,因为我可以直接在那里做任何我需要做的事。
这非常有效,感谢提示。
data.forEach(function (streams) {
console.log("Got " + streams.name + " " + streams.streamurl);
stream[streams.name] = streams.streamurl;
});
res.render('dashboard', {
title: 'Dashboard',
user: req.user,
listing: data
}
)