我有进行插入的流星方法。我使用 Regulate.js 进行表单验证。
我将 game_id 字段设置为 Meteor.uuid() 以创建一个唯一值,我还使用 Iron 路由器将其路由到 /game_show/:game_id。
如您所见,我正在记录游戏的详细信息,这很好用。(图片链接到下面的日志)
文件:/lib/methods.js
Meteor.methods({
create_game_form : function(data){
Regulate.create_game_form.validate(data, function (error, data) {
if (error) {
console.log('Server side validation failed.');
} else {
console.log('Server side validation passed!');
// Save data to database or whatever...
//console.log(data[0].value);
var new_game = {
game_id: Meteor.uuid(),
name : data[0].value,
game_type: data[1].value,
creator_user_id: Meteor.userId(),
user_name: Meteor.user().profile.name,
created: new Date()
};
console.log("NEW GAME BEFORE INSERT: ", new_game);
GamesData.insert(new_game, function(error, new_id){
console.log("GAMES NEW MONGO ID: ", new_id)
var game_data = GamesData.findOne({_id: new_id});
console.log('NEW GAME AFTER INSERT: ', game_data);
Session.set('CURRENT_GAME', game_data);
});
}
});
}
});
此时从 console.log 出来的所有数据都可以正常工作
在此方法调用客户端路由到 /game_show/:game_id
Meteor.call('create_game_form', data, function(error){
if(error){
return alert(error.reason);
}
//console.log("post insert data for routing variable " ,data);
var created_game = Session.get('CURRENT_GAME');
console.log("Session Game ", created_game);
Router.go('game_show', {game_id: created_game.game_id});
});
在这个视图中,我尝试使用刚刚插入的 game_id 加载文档
Template.game_start.helpers({
game_info: function(){
console.log(this.game_id);
var game_data = GamesData.find({game_id: this.game_id});
console.log("trying to load via UUID ", game_data);
return game_data;
}
});
抱歉不能上传图片... :-(
正如您从下面的控制台日志图像中看到的那样,一切都匹配
- 插入前记录的 id
- 使用 findOne() 在插入回调中记录的 id
- 在 url 中传递的 id
但是,我插入的 mongo ID 和 UUID 不存在,其中唯一的文档具有除这两个之外的所有其他字段匹配!
不知道我做错了什么。谢谢!