Пустой вывод с шаблоном усов, connect & node.JS
Я только что вошел в этот узел.js business и нравится это до сих пор; однако я столкнулся с проблемой, связанной с connect/mustach.
Вот код для простого одностраничного приложения; на данный момент я действительно просто пытаюсь заставить приложение использовать мои шаблоны усов, чтобы я мог взять его оттуда.
var connect = require("connect"),
fs = require("fs"),
mustache = require("mustache");
connect(
connect.static(__dirname + '/public'),
connect.bodyParser(),
function(req, res){
var data = {
variable: 'Some text that I'd like to see printed out. Should in the long run come from DB.'
},
htmlFile = fs.createReadStream(
__dirname + "/views/index.html",
{ encoding: "utf8" }
),
template = "",
html;
htmlFile.on("data", function(data){
template += data;
});
htmlFile.on("end", function(){
html = mustache.to_html(template, data);
})
res.end(html);
}
).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
Моя проблема здесь заключается в том, что приведенный выше код генерирует пустую веб-страницу.
Если я регистрирую переменную html
, то получаю два вывода html с вложенным в нее текстом variable
, так что to_html
- функция, кажется, делает свою работу. И если я делаю res.end('some string');
, строка отображается в браузере так, как она должна.
Шаблон является простым старым .html-файл с тегом <p>{{variable}}</p>
в теле.
Любая идея, что случилось?
1 ответ:
Ваша проблема заключается в том, что вы неправильно используете асинхронный код. К моменту вызова
res.end(html)
файл еще не считан. Правильное использование:htmlFile.on("end", function(){ html = mustache.to_html(template, data); res.end(html); })
Также следует позаботиться о синтаксической ошибке:
variable: 'Some text that I'd like to see printed out. Should in the long run come from DB.'
(злоупотребление')