使用meteor iron路由器刷新页面

使用meteor iron路由器刷新页面,meteor,iron-router,Meteor,Iron Router,问题是: 我目前正在根据在github()上找到的内容编写聊天应用程序 我正在用铁路由器重构它 当我进入页面(点击链接)时,我会得到一个现有的聊天室(这就是我想要的) 当我刷新页面(F5)时,我会得到一个新创建的聊天室!(我想要的是得到现有的聊天室…) 以下是ironrouter中的代码: Router.route('/chatroom', { name: 'chatroom', data: function() { var currentId = Session.get('c

问题是:

我目前正在根据在github()上找到的内容编写聊天应用程序 我正在用铁路由器重构它

当我进入页面(点击链接)时,我会得到一个现有的聊天室(这就是我想要的) 当我刷新页面(F5)时,我会得到一个新创建的聊天室!(我想要的是得到现有的聊天室…)

以下是ironrouter中的代码:

Router.route('/chatroom', {
  name: 'chatroom',
  data: function() {

    var currentId = Session.get('currentId'); //id of the other person
    var res=ChatRooms.findOne({chatIds:{$all:[currentId,Meteor.userId()]}});
    console.log(res);
    if(res){
      Session.set("roomid",res._id);
    }
    else{
      var newRoom= ChatRooms.insert({chatIds:[currentId, Meteor.userId()],messages:[]});
      Session.set('roomid',newRoom);
    }

  }
});
您可以在整个项目中找到我的github回购协议:


太多了

在meteor中,当客户端启动时,
会话
对象为空,通过HTTP加载/刷新页面将“重启”客户端。要解决此问题,您可以将用户的对应id保留在Meteor.user属性中,以便轻松执行以下操作:

Router.route('/chatroom', {
  name: 'chatroom',
  data: function() {
    var currentId = Meteor.user().profile.correspondentId;
    var res=ChatRooms.findOne({chatIds:{$all:[currentId,Meteor.userId()]}});
    console.log(res);
    if(res){
      Session.set("roomid",res._id);
    }
    else{
      var newRoom= ChatRooms.insert({chatIds:[currentId, Meteor.userId()],messages:[]});
      Session.set('roomid',newRoom);
    }
  }
});
如果有适当的权限,这会起作用,但我建议不要在客户端上直接更新该值(我不知道您是否希望用户能够覆盖其对应的ID)。因此,如果您想保护此过程,请使用服务器方法调用替换所有代码,这样更新会更安全


David Weldon给出了另一个(更常见的情况)解决方案,如果您不介意在meteor中的URL中包含ID(因此不是一个URL)

,则当客户端启动时,
会话
对象为空,并且通过HTTP加载/刷新页面会“重新启动”客户端。要解决此问题,您可以将用户的对应id保留在Meteor.user属性中,以便轻松执行以下操作:

Router.route('/chatroom', {
  name: 'chatroom',
  data: function() {
    var currentId = Meteor.user().profile.correspondentId;
    var res=ChatRooms.findOne({chatIds:{$all:[currentId,Meteor.userId()]}});
    console.log(res);
    if(res){
      Session.set("roomid",res._id);
    }
    else{
      var newRoom= ChatRooms.insert({chatIds:[currentId, Meteor.userId()],messages:[]});
      Session.set('roomid',newRoom);
    }
  }
});
如果有适当的权限,这会起作用,但我建议不要在客户端上直接更新该值(我不知道您是否希望用户能够覆盖其对应的ID)。因此,如果您想保护此过程,请使用服务器方法调用替换所有代码,这样更新会更安全


David Weldon给出了另一个(更常见的情况)解决方案,如果您不介意在meteor中的URL中包含ID(因此不是一个URL)

,则当客户端启动时,
会话
对象为空,并且通过HTTP加载/刷新页面会“重新启动”客户端。要解决此问题,您可以将用户的对应id保留在Meteor.user属性中,以便轻松执行以下操作:

Router.route('/chatroom', {
  name: 'chatroom',
  data: function() {
    var currentId = Meteor.user().profile.correspondentId;
    var res=ChatRooms.findOne({chatIds:{$all:[currentId,Meteor.userId()]}});
    console.log(res);
    if(res){
      Session.set("roomid",res._id);
    }
    else{
      var newRoom= ChatRooms.insert({chatIds:[currentId, Meteor.userId()],messages:[]});
      Session.set('roomid',newRoom);
    }
  }
});
如果有适当的权限,这会起作用,但我建议不要在客户端上直接更新该值(我不知道您是否希望用户能够覆盖其对应的ID)。因此,如果您想保护此过程,请使用服务器方法调用替换所有代码,这样更新会更安全


David Weldon给出了另一个(更常见的情况)解决方案,如果您不介意在meteor中的URL中包含ID(因此不是一个URL)

,则当客户端启动时,
会话
对象为空,并且通过HTTP加载/刷新页面会“重新启动”客户端。要解决此问题,您可以将用户的对应id保留在Meteor.user属性中,以便轻松执行以下操作:

Router.route('/chatroom', {
  name: 'chatroom',
  data: function() {
    var currentId = Meteor.user().profile.correspondentId;
    var res=ChatRooms.findOne({chatIds:{$all:[currentId,Meteor.userId()]}});
    console.log(res);
    if(res){
      Session.set("roomid",res._id);
    }
    else{
      var newRoom= ChatRooms.insert({chatIds:[currentId, Meteor.userId()],messages:[]});
      Session.set('roomid',newRoom);
    }
  }
});
如果有适当的权限,这会起作用,但我建议不要在客户端上直接更新该值(我不知道您是否希望用户能够覆盖其对应的ID)。因此,如果您想保护此过程,请使用服务器方法调用替换所有代码,这样更新会更安全



David Weldon给出了另一个(更常见的情况)解决方案,如果您不介意在URL中包含ID(因此不是一个URL)

您的路由数据取决于刷新后将被擦除的
会话变量。您有几个选项,但最简单的方法是将房间id直接放入路由:
'/chatroom/:\u id'
。然后您可以使用
this.params.\u id
获取相应的
聊天室
文档。请注意,如果聊天室不存在,您仍然可以保留
'/chatroom'
,但是您需要在插入后重定向到
'/chatroom/:_id'

您的路由数据取决于刷新后将被擦除的
会话
变量。您有几个选项,但最简单的方法是将房间id直接放入路由:
'/chatroom/:\u id'
。然后您可以使用
this.params.\u id
获取相应的
聊天室
文档。请注意,如果聊天室不存在,您仍然可以保留
'/chatroom'
,但是您需要在插入后重定向到
'/chatroom/:_id'

您的路由数据取决于刷新后将被擦除的
会话
变量。您有几个选项,但最简单的方法是将房间id直接放入路由:
'/chatroom/:\u id'
。然后您可以使用
this.params.\u id
获取相应的
聊天室
文档。请注意,如果聊天室不存在,您仍然可以保留
'/chatroom'
,但是您需要在插入后重定向到
'/chatroom/:_id'

您的路由数据取决于刷新后将被擦除的
会话
变量。您有几个选项,但最简单的方法是将房间id直接放入路由:
'/chatroom/:\u id'
。然后您可以使用
this.params.\u id
获取相应的
聊天室
文档。请注意,如果聊天室不存在,您仍然可以保留
'/chatroom'
,但是插入后您需要重定向到
'/chatroom/:_id'

谢谢您的时间!我尝试过你的解决方案,但现在当我点击链接时,它会给我创建一个新的聊天室……是的,想想看,你需要存储其他用户的id。将编辑我的答案。事实上,我让它在客户端,不再在路由器。。。谢谢你的时间:)谢谢你的时间!我尝试过你的解决方案,但现在当我点击链接时,它为我创建了一个新的聊天室…是的,想想看,你需要