Search code examples
meteoriron-router

Refreshing page with meteor iron router


Here is the problem :

I am currently programming a chatapp based on what i found on github (https://github.com/sasikanth513/chatDemo) I am refactoring it with iron-router.

When I go to the page (clicking on the link) I get an existing chatroom (that's what I want) When I refresh the page (F5) I get a new created chatroom ! (what i want is getting the existing chatroom ...)

Here is the code in 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);
    }

  }
});

You can find my github repo with the whole project : https://github.com/balibou/textr

Thanx a lot !


Solution

  • Your route data depends on Session variables which will be erased after a refresh. You have a few options but the easiest would be to put the room id directly into the route: '/chatroom/:_id'. Then you can use this.params._id to fetch the appropriate ChatRooms document. Note that you could still keep '/chatroom' for cases where the room doesn't exist, however you'd need to redirect to '/chatroom/:_id' after the insert.