2014-11-06 44 views
1

我正在通過Discover Meteor教程開展工作,儘管Posts = new Mongo.Collection('posts');的所有功能都在服務器端Mongo shell上工作,但在瀏覽器控制檯上調用Posts功能很簡單不工作:Meteor 1.0 MiniMongo不向客戶端提供對象

Posts.insert() 
ReferenceError: Posts is not defined` 

收集在一個posts.js我的文件夾lib/collections宣佈,因爲這樣的:

Posts = new Mongo.Collection('posts'); 
if (Meteor.isServer) { 
    Meteor.publish('posts', function(){ 
     return Posts.find()}); 
} 
if(Meteor.isClient) { 
    Meteor.subscribe('posts'); 
} 

`

任何想法或建議嗎?當我在Mongo shell中運行db.posts.insert({title:「postname})時,新的帖子在瀏覽器中立即異步顯示,所以我知道數據庫正在運行。 我很早就在教程中所以我覺得這不應該發生。

+0

看起來像'Posts = new Mongo.Collection('posts');'只在客戶端定義。它可能位於'/ client/... js'文件中,還是位於'Meteor.isClient'塊中? – 2014-11-06 02:35:09

+0

不,它是在'/ meteorapp/lib/collections'文件夾中定義的。它在Mongo shell中定義並工作得很好,但不適用於客戶端/瀏覽器端的終端。它位於posts.js文件中。 – zavtra 2014-11-06 02:38:35

回答

3

首先(只是良好做法),在控制檯上運行這個

Cd myApp 
meteor remove autopublish 

現在,您需要發佈(服務器端),訂閱(客戶端), all yours收藏集

//server side 
    Posts = new Mongo.Collection('Posts'); 
    Meteor.publish('Posts', function(){ 
    return Posts.find() 
    }); 

    /Client side 
    Posts = new Mongo.Collection('Posts'); 
    Meteor.subscribe('Posts'); 

希望這作品隊友,並保持光盤Overing Meteor

+0

嗨,謝謝! 我把它放在lib/collections /目錄下的posts.js文件中嗎? – zavtra 2014-11-06 02:49:31

+0

你應該只使用/ lib來放置像jquery,momento等一些圖書館,我主張使用/服務器把服務器方法和發佈和/客戶端訂閱等 – Ethaan 2014-11-06 02:51:49

+0

你alrely刪除autopublish? – Ethaan 2014-11-06 03:02:05

0

您使用的是基於網絡的雲端IDE嗎?

如果是... 請勿使用基於Web的IDE附帶的JavaScript控制檯。在一個真正的瀏覽器中運行你的輸出,如Firefox或Chrome,並使用他們的JavaScript控制檯。

+0

嗨Armadeus, 謝謝,但最終的問題是,我在我的Raspberry Pi上運行我的流星服務器,我通過一個可公開訪問的端口進行隧道傳輸。我希望我的域名顯示在瀏覽器的URL中,而不是我的IP中地址和端口號,所以我把整個網絡應用程序通過一個URL框架。不幸的是,URL框架阻止Javascript命令從瀏覽器的shell通過框架發佈到應用程序的客戶端。 – zavtra 2015-08-17 15:34:27

相關問題