我正在使用Meteor,它使用Mongodb作为其数据库。当用户填写表单时,我有代码将几个文档插入到集合中。当插入这些文档时,我想在服务器端目录中引发一些JavaScript代码,这些代码通过相关集合对刚刚插入文档的具有匹配字段的文档进行排序。如何使用Meteor服务器端事件触发事件
我的问题是,我不知道如何在新文档到达时触发服务器上的代码。在涉及插入的代码的末尾有一个Meteor.method,Meteor.call
是否有意义,用Meteor.method调用预先形成我需要的排序代码?
编辑:
正如你所看到的,在下面的代码我不调用任何流星方法为无尚不存在。这个代码的绝大多数仅仅是在页面末尾的insert({})
,所以我认为它可以安全地被忽略。我唯一的服务器端代码是声明possibleGames mongo集合。
我不确定你的意思是通过调用一个普通的JavaScript函数,我的问题是得到任何代码触发。
possibleGames = new Mongo.Collection("possibleGames");
Template.meet_form.events({
"submit .meet_form": function(event, template){
event.preventDefault();
var user = Meteor.userId();
var where = event.target.where.value;
var checkedGames = [];
function gameCheck (game) {
if (game.checked === true){
checkedGames.push(game.value);
};
};
var checkedDays = [];
function dayCheck (day) {
if (day.checked === true){
checkedDays.push(day.value);
};
};
console.log(event.target.where.value)
gameCheck(event.target.dnd);
gameCheck(event.target.savageWorlds);
gameCheck(event.target.shadowRun);
console.log(checkedGames);
dayCheck(event.target.monday);
dayCheck(event.target.tuesday);
dayCheck(event.target.wednesday);
dayCheck(event.target.thursday);
dayCheck(event.target.friday);
dayCheck(event.target.saturday);
dayCheck(event.target.sunday);
console.log(checkedDays);
var whereWhat = [];
for (i = 0; i < checkedGames.length; i++) {
var prepareWhereWhat = where.concat(checkedGames[i]);
whereWhat.push(prepareWhereWhat);
};
console.log(whereWhat);
var whereWhatWhen = [];
for (a = 0; a < whereWhat.length; a++) {
var prepareWWW1 = whereWhat[a];
for (b = 0; b < checkedDays.length; b++) {
var prepareWWW2 = prepareWWW1.concat(checkedDays[b]);
whereWhatWhen.push(prepareWWW2);
};
};
console.log(whereWhatWhen);
for (i = 0; i < whereWhatWhen.length; i++) {
possibleGames.insert({
game: whereWhatWhen[i],
user: user,
created_on: new Date().getTime()
})
}
}
});
你想在服务器上执行什么样的代码? –
来自客户端的'insert'会导致一个'Meteor.method'调用,而不是你触发的那个。为了安全起见,您应该在服务器上使用“允许/拒绝”规则,或者防止客户端通过插入/更新直接变更数据,并使用显式方法。确保您验证来自客户端的输入。您可以在服务器上的方法体中执行所需的查询,或者在集合发生变化时使用'collection-hooks'包或'event-emitter'来执行某些操作。 – MasterAM
我还没完全迷惑它,但我认为一个collection.find(),使用刚刚作为选择器到达的文档条目,然后对collection.find()的结果进行一些操作。 我有一个有趣的感觉,答案是非常明显的,并且是所有流星代码的主要部分,每个人都假设我知道这个代码,并且在使用它时遇到了一些异常问题。我只是不知道代码。 –