繁体   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