javascriptmeteorroutesflow-router

Can not read the slug from url on Flow Router (Meteor)


I'm trying to implement a basic route using Flow Router. But no matter what _id of a collection document I request; I always only get the info about the first document in my collection - 'Requests'.

So here's my route definition in the file /lib/routes.js:

FlowRouter.route('/requests/:reqId', {  
  subscriptions: function (params, queryParams) {
    this.register('theRequest', Meteor.subscribe('singleRequest', params.reqId));
  },
  action: function (params, queryParams) {
    FlowLayout.render('layout', { aside: 'aside', main: 'singleRequest' });
    console.log("Yeah! We are on the post:", params.reqId);
  },
  name: 'aRequest'
});

Here's my helper:

Template.singleRequest.helpers({  
    getRequest: function () {
        return Requests.findOne();
    }
});

Here's my server publish:

Meteor.publish('singleRequest', function (reqId) {  
    return Requests.find({ _id: reqId});
});

And here's the template:

<template name="singleRequest">  
  {{#if isSubReady 'theRequest'}}
    {{#with getRequest}}
      <h2>{{_id}}</h2>
      <p>{{reqFrom}}</p>
      <p>{{reqBy}}</p>
    {{/with}}
  {{else}}
    loading...
  {{/if}}
</template> 

What am I doing wrong? Note: In the console, I do see right 'reqId' slug due to the console.log command in the route definition. But I do not see the relevant info for the document which it belongs to.

Thanks!


Solution

  • OK my problem was that I previously had another subscription where I published all the Requests - not just the one with that certain _id. And because I did not create the helper to get only the one with that certain _id; of course server just sent me the very first request.

    My solution was only to subscribe to previous subscription and define in the helper to fetch to the request _id:

    FlowRouter.route('/requests/:reqId', {  
      subscriptions: function (params, queryParams) {
        this.register('allRequests', Meteor.subscribe('Requests', params.reqId));
      },
      action: function (params, queryParams) {
        FlowLayout.render('layout', { aside: 'aside', main: 'singleRequest' });
        console.log("Yeah! We are on the post:", params.reqId);
      },
      name: 'aRequest'
    });
    

    and the helper:

    Template.singleRequest.helpers({ 
      getRequest: function () {
        var reqId = FlowRouter.getParam("reqId")
        return Requests.findOne({_id:reqId});
      }    
    });