3

.ejs現在 Node.js を学んで Web アプリケーションを作成していますが、同じファイルを 2 回レンダリングする方法がわかりません。

したがって、次の.ejsファイルで:

<table>
<% rows.forEach(function(ind){ %>
/* map each value of each field to table */
<% }) %>
</table>

<table>
<% rows2.forEach(function(ind){ %>
/* map each value of each field to table */
<% }) %>
</table>

そして、2つの別々のクエリを実行して同じファイルにレンダリングしたいのですが、最初のクエリを実行して上記のファイルに.ejsレンダリングしようとしたときからできません。 2 番目のテーブル (つまりデータ).ejsの値を吐き出す 2 番目のクエリの結果です。row2どうすれば対処できますか?それとも、2 つの別個の.ejsファイルを作成し、ネストされた形式で 2 回レンダリングする必要がありますか? ネストされたファイルをできるだけ避けたいので、解決策があれば教えてください...

ありがとう。

4

1 に答える 1

6

結果をレンダリングする前に、両方のクエリが完了するまで待ってください:)

概念的に:

db.query(QUERY1, function(err, result1) {
  db.query(QUERY2, function(err, result2) {
    res.render('template', { rows : result1, rows2: result2 });
  });
});

そのような関数を入れ子にする代わりに、async.parallelを見ることができます。これにより、上記のコードは次のようになります。

async.parallel([
  function(callback) { db.query(QUERY1, callback) },
  function(callback) { db.query(QUERY2, callback) }
], function(err, results) {
  res.render('template', { rows : results[0], rows2 : results[1] });
});

を使用する利点はasync.parallel、最初の例のように順次ではなく、両方のクエリが互いに並行して実行されることです。そのため、応答はより速くなります (可能性があります)。

于 2013-06-14T06:17:53.873 に答える