2

私はこのnode.jsビジネス全体に取り掛かっていて、今のところ気に入っています。ただし、connect/mustachに関連する問題が発生しました。

単純な1ページアプリのコードは次のとおりです。この時点で、私は実際にアプリに口ひげテンプレートを使用させて、そこから取得できるようにしようとしています。

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/');

ここでの私の問題は、上記のコードが空白のWebページを生成することです。-variableをログに記録すると、テキストが添付されhtmlたhtmlの2つの出力が得られるため、-functionはそれを実行しているように見えます。そして、私がそうすると、文字列がブラウザに表示されます。variableto_htmlres.end('some string');

<p>{{variable}}</p>テンプレートは、本体に-tagが付いた単純な古い.htmlファイルです。

何が問題なのか分かりますか?

4

1 に答える 1

2

あなたの問題は、非同期コードを正しく使用していないことです。呼び出されるまでに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.'
'の誤用)

于 2012-04-21T13:54:10.367 に答える