【问题标题】:Meteor: Input data to a new collectionMeteor:向新集合输入数据
【发布时间】:2015-08-03 08:36:23
【问题描述】:

我尝试将一些元素插入到集合中。这是我第一次尝试使用 Meteor/MongoDB。所以我不明白,我做错了什么。 当我尝试保存新标题时,出现错误

“访问被拒绝。不允许在受限集合上设置验证器 方法“插入”。 [403]"

模板:

<template name="casuistry">
    <div class="create">
        <form>
            <input type="text" name="title" placeholder="Title">
            <button>Add</button>
        </form>
    </div>
</template>

collections.es6.js

Casuistry = new Mongo.Collection('casuistry')
Casuistry.attachSchema(new SimpleSchema({
  title: {type: String},
  caseNumber: {type: Number, defaultValue: 0},
  htmlContent: {type: String, defaultValue: '[]'},
}))

casuistry.es6.js

Template.casuistry.events({
  'submit .create form' (e, t) {
    var title = t.val('title')
    Casuistry.insert({title}, (err, _id) => {
      if (err) {
        console.log(err)
        return
      }
      t.val('title', '')
      Router.go('casuistry', {_id})
    })
    return false
  }
})

【问题讨论】:

  • 听起来像是一些出版问题。由于您处于开发阶段,因此您应该启用自动发布。你删除了吗?如果是这样,那么您必须创建一个“发布”或“订阅”。通过从命令行运行“流星控制台”,尝试从流星控制台中的提交回调运行您的代码。如果它有效,那么这是一个访问问题
  • 当我使用一个示例应用程序时,我想扩展它(用于了解流星的工作原理),我添加了上面显示的部分。所以一个类似的模块在示例应用程序中工作,但是我自己添加的这个新部分不起作用,我不明白为什么。我添加了Meteor.subscribe('casuistry'),但这也无济于事......

标签: javascript mongodb meteor


【解决方案1】:

您正在尝试从客户端插入到集合中。如果没有 insecure 包,您必须首先定义服务器端允许和不允许的内容 - 以确保用户不只是插入/删除/更新他们想要的任何内容。

您可以使用allow/denymethods(强烈推荐!)。我不会对方法与允许/拒绝进行深入讨论,there are good blog posts available on this topic,但总的来说:允许/拒绝很难正确处理,您只需对方法拥有更多控制权。

需要注意的是,您还可以通过将null 传递给构造函数来定义客户端集合:

var clientCollection = new Mongo.Collection(null);

在这种情况下,您可以像以前一样使用集合 - 因为它是一个仅限客户端的集合,所以没有理由担心有人篡改您的“真实”数据。

【讨论】:

  • 因为我现在处于“开发模式”,所以我现在没有删除不安全的包。所以我不认为,目前这是一个问题......
  • 好的,谢谢。如果我使用null,一切正常。所以我必须使用一些方法,对吧?
  • @user3142695 它可以工作,因为它没有服务器端检查。如果您使用实际的集合名称,Meteor 希望您验证是否允许用户插入数据;否则邪恶的人可能会接管你的数据库。您可以使用方法(推荐)或只为集合上的插入函数定义允许/拒绝规则。我强烈建议您查看链接的博客文章,这几乎是必读的。
猜你喜欢
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多