2016-04-13 10 views
4

So habe ich einen node.js Server, wo ich Express und ich versuche, ein Array zu Jade-Rendering übergeben.Übergeben Sie ein Array zu Jade-Rendering

Der Code in node.js:

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); 
    }); 
}); 

Und hier ist der Jade-Code:

select 
    -console.log(items); 
    each item in items 
     option= item 

Dies sollte meine wählen Sie in HTML bevölkern, aber es ist leer.

Jede Hilfe wäre willkommen!

+0

Mögliche Duplikate von [Probleme mit der Übergabe von Array zu Jade-Vorlage in node.js] (http://stackoverflow.com/questions/20294541/having-problems-with-passing-array-to-jade-template-in -node-js) –

Antwort

0

Das ist der richtige Weg, aber das Problem ist, dass fs.readFile asynchron ist. In diesem Fall rendern Sie ein leeres Array (weil die Datei noch nicht gelesen wurde).

Mögliche Lösung:

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); 
    }); 
}); 

Oder statt nisten, können Sie verspricht verwenden.

Verwandte Themen