将数组传递给玉渲染

时间:2016-04-13 09:09:50

标签: javascript node.js express pug

所以我有一个node.js服务器,我使用express,我试图将数组传递给jade渲染。

node.js中的代码:

<section class="services-amenities">
  <div class="col-lg-4 col-md-6 col-sm-6 text-center box">
            <div class="img-container"><span class="icon icon_breakfast"></span></div>
            <div class="text-uppercase">Complimentary Continental Breakfast</div>
        </div>
  
  </section>

以下是玉码:

router.get('/render', function(req, res) {
    var t;
    var combo = {'items': []};

    fs.readFile('ek.txt', function(err, data){
        if(err) {
            return console.error("Error: " + err);
        }

        t = data.toString();

        combo.items = t.split(" ");
        combo.items.pop(); //delete last element which is \r\n
        console.log(combo.items);
    });

    res.render('register', {'items': combo.items}, function(err, html) {
        if(err)
            console.log(err);
        else
            res.send(html);
    });
});

这应该在HTML中填充我的选择,但它是空的。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

这是正确的方法,但问题是fs.readFile是异步的。所以会发生什么是渲染一个空数组(因为该文件尚未被读取)。

可能的解决方案:

fs.readFile('ek.txt', function(err, data){
    if(err) {
        return console.error("Error: " + err);
    }

    t = data.toString();

    combo.items = t.split(" ");
    combo.items.pop(); //delete last element which is \r\n
    console.log(combo.items);

    res.render('register', {'items': combo.items}, function(err, html) {
        if(err)
            console.log(err);
        else
            res.send(html);
    });
});

或者代替嵌套,您可以使用promises。