Search code examples
sessionmeteorcoffeescriptiron-router

Meteor.js: access Session variable from RouteController waitOn


I need to access a Session Variable from a RouteController in the waitOn function in my meteor application, I set a session variable on the onCreated block in a template:

Template.practicalQuestionForm.onCreated ->
    Session.set 'domId', Random.id()

Then I need to access to that Session variable Session.get 'domId' from my controller, look at the waitOn:

@testsAddQuestionController = testsQuestionsController.extend
  template: ->
    qType = Router.current().params.type
    if qType == 'practical'
      'practicalQuestionForm'
    else if qType == 'mcq'
      'mcqQuestionForm'
  waitOn: ->
    console.log Session.get 'domId'
    Meteor.subscribe 'currentSessionUploads', Session.get 'domId'
  data: ->
    questions: TestQuestions.find()  
    test: Tests.findOne slug: this.params.slug
    previous: TestQuestions.find({}, sort: createdAt: 1, limit: 1).fetch().pop()

However I only get undefined can someone tell me if this is possible? if not what other alternatives do you can advise to me?

Thanks in advance.


Solution

  • If you want to use Session in your waitOn function, you need to make sure that this code will be executed on the client.

    For instance:

    waitOn: function() {
      var domId = undefined;
      if(Meteor.isClient) {
        domId = Session.get('domId');
      }
      return Meteor.subscribe('currentSessionUploads', domId);
    }
    

    Please note that you need to check if domId is undefined in your publication (server-side).

    Also You have to check that your Session variable is not already defined, otherwise you will get an infinite loop and your controller will get crazy:

    Template.practicalQuestionForm.onCreated ->
        if not Session.get 'domId'
            Session.set 'domId', Random.id()