1

サーバー側コード:

if (Meteor.isClient) {
  Meteor.subscribe("messages");
  Template.hello.greeting = function () {
    Messages = new Meteor.Collection("messages");
    Stuff = new Meteor.Collection("stuff");
    return "Welcome to feelings.";
  };

  Template.hello.events({
    'click input' : function () {
      // template data, if any, is available in 'this'
      if (typeof console !== 'undefined')
        var response = Messages.insert({text: "Hello, world!"});
        var messages = Messages.find
        console.log("You pressed the button", response, Messages, Stuff);
    }
  });
}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
    Messages = new Meteor.Collection("messages");
    Messages.insert({'text' : 'bla bla bla'});
  });
}

クライアント側コード

<head>
  <title>Test</title>
</head>

<body>
  {{> hello}}
</body>

<template name="hello">
  <h1>Hello World!</h1>
  {{greeting}}
  <input type="button" value="Click"/>
</template>

問題:

JavaScript コンソールで Messages.insert({'text' : 'test test test'}); と入力すると、またはボタンをクリックします。その下にデータベース挿入呼び出しが書かれています

mongo に挿入されたドキュメントが表示されません。mongo コンソールに移動して show dbs を実行すると、メッセージが表示されます (空)

他にもいくつか質問があります。流星のドキュメントを読み、グーグルで検索しましたが、これに対する明確な答えが見つからないようです:

  1. サーバーコードだけでなくクライアントコードでもコレクションを宣言する必要があるのはなぜですか?
  2. Template.hello.greeting 内でコレクションを宣言していますが、if(Meteor.isClient) ブロックに直接入れた場合の違いは何ですか。
  3. 流星のようなレールにアプリのディレクトリ構造を追加する計画はありますか? モデルとテンプレートはどこで分離されていますか? 私はexpress.jsについて話しているのではありません

ありがとう。

4

1 に答える 1

11

isClientとの両方のスコープの外側など、グローバル スコープで MongoDB コレクションを作成する必要がありますisServer。したがってMessages = new Meteor.Collection("Messages")、そのヘルパー関数から削除して、グローバル スコープに配置します。

meteor ではクライアント コードからのデータベース挿入が許可されていないため、クライアントから直接挿入を実行することはできません。それでもクライアントから挿入/更新したい場合は、クライアントのデータベース ルールを定義する必要があります。 docsを参照してください。

または、ドキュメントを挿入するサーバー メソッドを作成し、 を使用してクライアントから呼び出す方法をお勧めします Meteor.call()

コレクションは、クライアントからアクセス可能なサーバーにデータを格納するために使用されるため、内部にコレクションを作成Template.hello.greetingしても意味がありません。

更新: Meteor > 0.9.1

Meteor でのコレクションの作成は次のようになりました。

Messages = new Mongo.Collection("Messages")

それ以外の:

Messages = new Meteor.Collection("Messages")
于 2013-04-09T08:17:29.953 に答える