3

mongodb データベースにいくつかのデータがあり、ホームページをロードするときにバックボーン コレクションに渡したいと考えています。これを行う 1 つの方法は、次のようなノード ルートを設定することです。

exports.index = function(req, res){

  db.users.find(function(err, docs) {
    var docs_string = JSON.stringify(docs);
    res.send(docs_string);
  };
};

しかし、バックボーン コードをプルする jade テンプレートをレンダリングしないため、これは機能しません。JSON をプレーン テキストで表示するだけです。

または、データを変数として jade に渡す jade テンプレートをレンダリングすることもできます。

exports.index = function(req, res){

  db.users.find(function(err, docs) {
    var docs_string = JSON.stringify(docs);
    res.render('index', {
      title: "Data",
      docs_string: docs_string
    })
  });
};

次に、jade テンプレートで、次のようなスクリプトを作成して、ユーザーをユーザー コレクションに追加します。

script
  var docs = !{docs_string};
  var users = new app.Users();
  _.each(docs, function(doc) {
      var user = new app.User(doc);
      users.add(user);
  })

しかし、これは間違っているようです。実際にはデータを jade テンプレートに渡したいわけではないので、バックボーン コレクションに渡したいのです。また、このソリューションでは、サーバー側の jade によってレンダリングされたページに (バックボーン側の) アンダースコア テンプレートを含める方法がわかりません。

ノード サーバーからバックボーン コレクションにデータを渡す標準的な方法は何ですか?

4

2 に答える 2

1

データがオブジェクトであると仮定すると、JSON.stringify() を使用して文字列に変換し、script タグ内のページに挿入する必要があります。結果の HTML は次のようになります (私は Jade を使用しません)。

<script>
    var data = {...}; // in template instead of {...} here should be the instruction to insert your json string
</script>

次に、ページが読み込まれると、スクリプトが実行され、データがブラウザーでグローバル変数として使用できるようになるため、それを使用してバックボーン コレクションを初期化できます。これはすべて、最初のページの読み込み時にデータをブートストラップし (余分なリクエストを避けるため)、API を使用してこのページや他のページのデータをリクエストするためだけに行うことをお勧めします。

于 2013-05-08T18:14:15.847 に答える