2017-06-27 2 views
0

Ich versuche, einige meiner gerenderten Seiten intelligenter zu machen, indem sie einige asynchrone Funktionen in die Rendering vorbei, wie folgt aus:NodeJS Express Strecke zurückkehr asynchrone Daten in einer gerenderten Route

var functions = { 
    paginatedCategory: function(category) { 
     db.query(`SELECT * FROM content WHERE FIND_IN_SET(Category, "${category}") ORDER BY position`, function(error, results) { 
     console.log(results, 'results'); 
     return results; 
     }) 
    } 
} 

Dann in der Route I‘ m dies zu tun:

res.render('category', functions); 

Und in der category.pug Seite ich so diese Funktion innerhalb bin Aufruf:

ul 
    each val in paginatedCategory('Products') 
     li=val 

in der Konsole macht nichts es alle richtigen Elemente in dieser Kategorie ausgibt, aber das machen, ich nehme an, weil es die Abfrage MySQL Datenbank asynchron ist, so dass es die Seite macht, bevor es alle Elemente zieht, wie würden Sie behandeln eine Situation wie diese?

Auch möchte ich in der Lage sein, Parameter zu übergeben direkt aus dem .pug Datei, da es von Datei Datei ändern.

Antwort

0

Normalerweise gehen Sie so vor, um alle asynchronen Daten in eine Datenstruktur zu bringen und sobald Sie alle Daten haben, rufen Sie res.render() an und übergeben Sie die Daten, die Sie gesammelt haben.

Sie können ein Beispiel dafür in diesem Artikel: Rendering a page after asynchronous operations.