NODE.JS函数回调渲染页面

时间:2014-11-29 01:35:29

标签: node.js

我有一个函数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
                }
            )
        }

2 个答案:

答案 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
            }
        )