2012-03-27 3 views
3

dust.js ist eine asynchrone JavaScript-Template-Engine - Sie übergeben einen Callback an die "render" -Funktion.Können dust.js-Vorlagen in einer CouchDB "show" -Funktion verwendet werden?

CouchDB "Show" -Funktionen, auf der anderen Seite, muss tatsächlich das HTML zurückgeben.

So kann ich dust.js nicht in meiner Show-Funktion verwenden! ... es wird einfach nicht funktionieren. Wie kann ich dieses synchrone/asynchrone Problem umgehen?

EDIT: ich sollte es tun können, indem Sie die (asynchron) mit "Senden" -Funktion:

function(doc,req){ 
    var dust = require('lib/dust'); 
    dust.renderSource('Hello, my name is {name}',{name:'Nick'},function(err,output){ 
     send(output); 
    }); 
} 

..aber das nicht funktioniert, bekomme ich diese:

{"error":"render_error","reason":"function raised error: (new TypeError(\"dust.compile is not a function\", \"\", 37)) \nstacktrace: (\"Hello, my name is {name}\")@:37\n(\"Hello, my name is {name}\",[object Object],(function (err, output) {send(output);}))@:33\n([object Object],[object Object])@:2\napply([object Object],[object Array])@:0\nrunShow(function (doc, req) {var dust = require(\"lib/dust\");dust.renderSource(\"Hello, my name is {name}\", {name:\"Nick\"}, function (err, output) {send(output);});},[object Object],[object Array])@/usr/share/couchdb/server/main.js:886\n(function (doc, req) {var dust = require(\"lib/dust\");dust.renderSource(\"Hello, my name is {name}\", {name:\"Nick\"}, function (err, output) {send(output);});},[object Object],[object Array])@/usr/share/couchdb/server/main.js:989\napply(null,[object Array])@:0\n(\"_design/ibs_policies\",[object Array],[object Array])@/usr/share/couchdb/server/main.js:1401\napply(null,[object Array])@:0\n()@/usr/share/couchdb/server/main.js:1443\[email protected]/usr/share/couchdb/server/main.js:1454\n"} 

Es scheint, dass "dust.js" nicht alle Funktionen ausgibt, wenn es als CommonJS-Modul importiert wird. Warum ist das? Wie kann ich das machen?

Antwort

1

Nur aufgrund eines vorläufigen Blicks auf die Quelle von Staub scheint es zu erwarten, einige knotenspezifische Dinge zu finden, wenn es nicht in einem Browser läuft. Insbesondere sieht es so aus, als ob dust.compile nur aus Code exportiert wird, der nur aufgerufen wird, wenn der Prozess definiert ist und das Fenster nicht. Keine wird definiert, wenn sie unter der View-Engine von CouchDB läuft.