2017-04-02 3 views
0

Neu bei Knoten und async und immer noch mit Konzepten zu kämpfen.iterative Render mit Knoten und Express

Der Versuch, Express/Lenker zu verwenden, rendern mit einem Callback, um iterativ einen HTML-Body mit Inhalt aus einem Array zu erstellen. Endziel ist es, eine Antwort mit einer Anzahl von E-Mails zu senden, die jeweils einzeln mit Hilfe von view.hbs gerendert werden.

Ich war so weit, aber erkannte, dass es nie funktionieren würde. res.render kann meine html-Variable nicht im Callback übergeben und res.send würde ausgeführt werden, bevor die Renderings abgeschlossen sind ???

function buildRes (req, res, email) { 
    var html = ''; 
    Object.keys(email).forEach(function (i) { 
     res.render('emailPanel', {subject: email[i].subject, body: email[i].body}, 
      function(err, renOut) { 
       if err throw err; 
       html=html+renOut; 
      } 
     ) 
    }) 
    res.send(html); 
} 

Irgendwelche Vorschläge, wie ich dieses Problem angehen sollte?

Begonnen mit dem Versuch, Lenker zu verwenden #einem Helfer, um die Iteration zu machen, aber alle Beispiele zeigen eine einfache Liste, während in meinem Fall mehrere Parameter an den Render übergeben werden müssen.

Antwort

0

Ich bin mir immer noch nicht sicher, was Sie damit erreichen wollen, aber eines ist sicher, ich denke, es ist besser für Sie, alle Schleifen innerhalb Ihrer Ansicht zu machen, indem Sie das gesamte Array (gefiltert) mit res übergeben. rendern zu Ihrer Ansicht. Beachten Sie auch, dass Sie nur einmal pro Anfrage antworten können.

+0

Vielen Dank Serjuice für mich darauf hingewiesen, es in der Ansicht zu lösen. Mit diesem Ansatz eher gedrängt und das hat bei mir funktioniert. Übergeben Sie nun ein Array von Objekten an die View-Engine und sortieren Sie sie dort aus. – PJ62

Verwandte Themen