2

I am trying to fetch an entry in a collection with:

client/views/home.js:

criticalCrewNumber = ConfigValues.find({
  name: 'criticalCrewNumber'
}).fetch()[0].value;

But I'm getting error:

Uncaught TypeError: Cannot read property 'value' of undefined

If I run the code in the browser console, the desired value is returned as a string.

I have tried various things, e.g. using findOne; placing the code elsewhere in the app; using iron-router waitOn for the subscription to come, etc. Every attempt so far has failed as I end up with undefined.

Here's how the collection is defined, published and subscribed to:

lib/config/admin_config.js:

ConfigValues = new Mongo.Collection("configValues");

ConfigValues.attachSchema(new SimpleSchema({
  name: {
    type: String,
    label: "Name",
    max: 200
  },
  value: {
    type: String,
    label: "Value",
    max: 200
  }
}));

both/collections/eventsCollection.js:

if (Meteor.isClient) {
  Meteor.subscribe('events');
  Meteor.subscribe('config');
};

server/lib/collections.js

``` Meteor.publish('events', function () { return Events.find(); });

Meteor.publish('config', function () { return ConfigValues.find(); }); ```

Does anyone know what's going on? Thanks.

KindOfGuy
  • 3,081
  • 5
  • 31
  • 47

1 Answers1

1

Consider using ReactiveVar (and Meteor.subscribe callbacks):

criticalCrewNumber = new ReactiveVar();

Meteor.subscribe('config', {
    onReady: function () {
        var config = ConfigValues.findOne({name: 'criticalCrewNumber'});
        if (config) {
            criticalCrewNumber.set(config.value);
        } else {
            console.error('No config value.');
        }
    },

    onStop: function (error) {
        if (error) {
            console.error(error);
        }
    }
});
Radosław Miernik
  • 4,004
  • 8
  • 33
  • 36