SirBT
SirBT

Reputation: 1698

Why aren't any of collections being defined after publishing them?

I keep on getting these error messages in my browser console:

Exception in template helper: ReferenceError: "CollectionNames" is not defined

The "CollectionNames" being all the collections I have in my app. I have researched but cant find a suitable solution.

My environment:
I am running meteor 1.2

The task.js file is where I define each collection. Below is the code in task.js

/myMeteorApp
--/imports/api/tasks.js

import { Mongo } from "meteor/mongo";
import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';

Images = new FS.Collection("images", {
stores: [new FS.Store.FileSystem("images", {path: "~/uploads"})] });

buyList = new Mongo.Collection("BuyList");

WhoAreWe = new Mongo.Collection("whoDb");
merchantReviews = new Mongo.Collection("merchantReviews");

Messages = new Meteor.Collection("messages", {transform: function (doc) 
{ doc.buyListObj = buyList.find({sessionIDz: {$in: [doc.buyList]}});  return doc; }});

The server is where I publish the collections. Below is the code:
/myMeteorApp
--/server/main.js

import buyList from '../imports/api/tasks.js';
import Messages from '../imports/api/tasks.js';
import Images from '../imports/api/tasks.js';
import WhoAreWe from '../imports/api/tasks.js';
import merchantReviews from '../imports/api/tasks.js';

Meteor.startup(() => {
// code to run on server at startup

Meteor.publish('buyList', function(){
return buyList.find();
});


Meteor.publish('Messages', function(){
return Messages.find();
});

Meteor.publish('Images', function(){
return Messages.find();
});


Meteor.publish('WhoAreWe', function(){
return WhoAreWe.find();
});

Meteor.publish('merchantReviews', function(){
return merchantReviews.find();
});

});


And the client is where I subscribe for the collections. Find below the code:

/myMeteorApp
--/client/main.js

import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';
import './main.html';

Meteor.subscribe('Messages');
Meteor.subscribe('WhoAreWe');
Meteor.subscribe('Images');
Meteor.subscribe('buyList');

Where am I going wrong. I've been at this for many days now... Kindly help!

Upvotes: 0

Views: 35

Answers (2)

Michel Floyd
Michel Floyd

Reputation: 20227

The collections must be defined on both the client and the server! Just import your collection names on the client side as well as the server:

import { buyList, Messages, Images, WhoAreWe, merchantReviews } from '../imports/api/tasks.js';

You still have to subscribe to the various publications of course.

Upvotes: 1

Mikkel
Mikkel

Reputation: 7777

It is a naming problem, when you publish the collection, you should refer to the collection name (messages), not the meteor variable (Messages)

Meteor.publish('messages', function(){...

Upvotes: 0

Related Questions