[英]Meteor: How to add Username from Users collection to a new collection I created?
[英]How do I set a created_on field on the server in a new Meteor Collection document?
我正在建立一个按时间顺序显示帖子的聊天室。 我目前正在“条目”模板的提交事件中设置客户端js中用户帖子的时间:
Template.entry.events = {
'submit': function(e){
e.preventDefault();
//console.log(this.userId());
var user = Meteor.user();
var roomName = Session.get('currentRoomName');
Messages.insert({
user: user,
room_name: roomName,
message: $('#message').val(),
created_on: new Date().getTime()
});
$("#message").val('');
}
};
我的问题是因为这个日期是在客户端上设置的,如果用户在他们的机器上更改时间,它将被记录为允许用户在当前对话之前或之后发布。 理想情况下,我可以在收到新的聊天条目后更新服务器上的created_on时间,以反映服务器上的当前UTC时间并更正任何值。我仍然希望在客户端上有时间延迟补偿等
我已经阅读了很多关于II的Meteor文档,怀疑我可能会使用.observe()来解决这个问题,但我是Meteor和Mongodb的新手。 观察入门集合中的每个文档会不会很疯狂? 是否可以仅观察新条目?
我也在使用auth分支 - 不确定这是否会有所不同。
如果聊天室中有很多用户, 这个非问题可能最终会被关联。
如果在Mongo / Meteor中这是一件非常容易的东西,我只是遗憾地道歉。
最简单的解决方案是使用方法而不是Messages.insert
创建的隐式方法。
在服务器上:
Meteor.methods({
addMessage: function(room_name, message) {
Messages.insert({
userId: this.userId,
room_name: room_name,
message: message,
created_on: new Date().getTime();
});
});
});
在客户端:
Template.entry.events = {
'submit': function(e) {
e.preventDefault();
Meteor.call('addMessage', Session.get('currentRoomName'), $('#message').val());
}
}
这将立即在客户端创建记录(使用客户端的日期),同时在服务器上创建记录(使用服务器的日期),然后在下次同步时覆盖客户端的记录。
我强烈建议您在auth
分支中引入ACL。 插入/更新/删除/获取时,您可以进行一些验证和/或修改。 看看在Meteor.Collection.prototype.allow
源文件下packages/mongo-livedata/collection.js
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.