簡體   English   中英

未在mongo中創建Meteor.js集合

[英]Meteor.js Collection not being created in mongo

服務器端代碼:

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. 是否有計划在流星中添加一些應用程序目錄結構(如rails)? 模型和模板在哪里分開? 我不是在談論express.js

謝謝。

您需要在全局范圍(如isClientisServer范圍之外)中創建MongoDB集合。 因此,從該輔助函數中刪除Messages = new Meteor.Collection("Messages")並將其放置在全局范圍內。

您不能直接通過客戶端執行插入操作,因為流星不允許從客戶端代碼插入數據庫。 如果仍要從客戶端插入/更新,則必須為客戶端定義數據庫規則,請參閱docs

或者首選方法是創建一個服務器方法來插入文檔,然后使用Meteor.call()從客戶端調用它。

Template.hello.greeting內創建集合沒有任何意義,因為這些集合用於將數據存儲在可從客戶端訪問的服務器上。

更新:流星> 0.9.1

現在可以在Meteor中創建收藏集:

Messages = new Mongo.Collection("Messages")

代替:

Messages = new Meteor.Collection("Messages")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM