Javascript Meteor:将数据输入到新集合
我尝试在集合中插入一些元素。这是我第一次尝试使用Meteor/MongoDB。所以我不明白我做错了什么。 当我尝试保存一个新标题时,我得到了一个错误 “访问被拒绝。不允许对的受限集合设置验证程序。” 方法“插入”。[403]” 模板:Javascript Meteor:将数据输入到新集合,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我尝试在集合中插入一些元素。这是我第一次尝试使用Meteor/MongoDB。所以我不明白我做错了什么。 当我尝试保存一个新标题时,我得到了一个错误 “访问被拒绝。不允许对的受限集合设置验证程序。” 方法“插入”。[403]” 模板: <template name="casuistry"> <div class="create"> <form> <input type="text" name="title"
<template name="casuistry">
<div class="create">
<form>
<input type="text" name="title" placeholder="Title">
<button>Add</button>
</form>
</div>
</template>
casuistry.es6.js
Casuistry = new Mongo.Collection('casuistry')
Casuistry.attachSchema(new SimpleSchema({
title: {type: String},
caseNumber: {type: Number, defaultValue: 0},
htmlContent: {type: String, defaultValue: '[]'},
}))
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
}
})
您正试图从客户端插入到集合中。如果没有包,您必须首先定义服务器端允许和不允许的内容,以确保用户不只是插入/删除/更新他们想要的内容 您可以使用/或(强烈推荐!)。我不打算深入讨论方法与允许/拒绝的比较,但一般来说:允许/拒绝很难正确,你只是在方法中有更多的控制权 需要注意的是,还可以通过将
null
传递到构造函数中来定义客户端集合:
var clientCollection = new Mongo.Collection(null);
在这种情况下,您将完全像以前一样使用该集合-因为它是一个仅限于客户端的集合,所以没有理由担心有人篡改您的“真实”数据。听起来像是一些出版物问题。因为您处于开发阶段,所以应该启用自动发布。你把它拿走了吗?如果是,则必须创建“发布”或“订阅”。通过从命令行运行“meteor console”,尝试从meteor控制台中的提交回调运行代码。如果它能工作,那么这就是一个访问问题。因为我正在使用一个示例应用程序,我想扩展它(为了学习meteor的工作原理),我添加了上面显示的部分。因此,在示例应用程序中,一个类似的模块正在工作,但我自己添加的这个新部件不起作用,我不明白为什么。我添加了
Meteor.subscribe('casuistry')
,但这也没有帮助…因为我现在处于“开发模式”,所以我没有立即删除不安全的包。所以我不认为这是目前的问题……好的,谢谢。如果我使用的是null
,那么一切都正常。所以我必须使用一些方法,对吗?@user3142695它可以工作,因为它没有服务器端检查。如果您使用实际的集合名称,Meteor希望您验证是否允许用户插入数据;否则会有邪恶的人接管你的数据库。您可以使用方法(推荐)或仅为集合上的insert函数定义允许/拒绝规则。我强烈建议大家看看链接的博客,这几乎是必读的。