流星 - 表单在提交时未插入集合

时间:2015-09-18 02:57:07

标签: javascript forms mongodb meteor meteor-accounts

我正在尝试使用meteor存储此表单中的信息:

<form class="form-group" id="lost_form">
      <label for="item_name">Type</label>
      <input id="item_name" class="form-control" type="text" placeholder="What is the item? Ex: Water bottle" required/>

      <label for="item_brand">Brand</label>
      <input id="item_brand" class="form-control" type="text" placeholder="What brand is the item? Ex: Nalgene" required/>

      <label for="item_desc">Description</label>
      <input id="item_desc" class="form-control" type="text" placeholder="Describe the item. Ex: Green, name on bottom" required/>

      <label for="item_loc">Location</label>
      <input id="item_loc" class="form-control" type="text" placeholder="Where did you have it last? Ex: Main common room"/>

      <label for="item_date">Date Missing</label>
      <input id="item_date" class="form-control" type="date"/>

      <br>
      <input id="submit_lost_form" class="btn btn-primary btn-block" type="submit" value="Submit" />

    </form>

我用来将它放入集合中的JS如下:

LostItems = new Meteor.Collection('lostitems');

Meteor.methods({
  'insertItem': function(iname, ibrand, idesc, iloc, idate){

    LostItems.insert({
      user: Meteor.user(),
      name: iname,
      brand: ibrand,
      description: idesc,
      location: iloc,
      date: idate
    })
  }
});

if (Meteor.isClient) {
  Template.lost_form.events({
    'submit form': function (event) {
      event.preventDefault();
      var itemName = event.target.item_name.value;
      var itemBrand = event.target.item_brand.value;
      var itemDesc = event.target.item_desc.value;
      var itemLoc = event.target.item_loc.value;
      var itemDate = event.target.item_date.value;
      Meteor.call('insertItem', itemName, itemBrand, itemDesc, itemLoc, itemDate);
    }
  });
}

但每当我提交表格时,都没有任何反应。开发人员控制台或流星控制台上没有错误,当我LostItems.find().fetch()时,没有任何错误。

我是流星的新手,所以这可能是一个非常愚蠢的问题,但我感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您可能需要在Meteor.userId()的通话中使用Meteor.user()代替insert()。如果没有autopublish包,Meteor.user()返回的文档在客户端上可能与服务器上的文档不同(出于安全原因)。这意味着客户端插入迷你mongodb和服务器端插入真正的mongodb可能会相互冲突。我希望在服务器端插入的结果传播回客户端之后忽略客户端插入。我不确定它为什么不被服务器端插入替换。在服务器上运行LostItems.find().fetch()时,meteor shell会返回什么内容?

答案 1 :(得分:-1)

我通过将insecureyogiben:autoform-tagsautopublish添加到我的包列表来解决了这个问题。我认为autopublish是有所作为的。我确信有更好的方法可以做到这一点,这可能有一些安全漏洞,但这不是一个大项目,它不存储敏感数据,所以这将适用于现在。