2014-01-23 36 views
4

我有一條簡單的帖子路線,查找帖子_id。 的問題是,pathFor幫助創建這樣的路徑:瞭解新的mongo ID並將其與鐵路路由器一起使用

ObjectID("52e16453431fc2fba4b6d6a8") 

我猜的MongoDB插入已經改變,現在_id對象持有另一對象裏面叫_str

這裏是我的路線:

this.route("post", { 
     path: "/post/:_id", 

     waitOn:function(){ 
      NProgress.start(); 
      Meteor.subscribe("Teams"); 
     }, 

     before: function() { 
      NProgress.done(); 
     }, 

     data: function() { 
      return Posts.findOne({_id: this.params._id}); 
     } 
    }); 

目前,它創建了一個href像:

post/ObjectID("52e16453431fc2fba4b6d6a8") 

點擊就可以打開一個URL

post/ObjectID("52e16453431fc2fba4b6d6a8") 

不過,我得到了「 NotFound「模板而不是帖子。

我該如何解決這個問題?

+0

確定,所以MONGO插入現在得到ObjectID字段的_id領域裏面,所以我嘗試找出是如何使路徑爲工作,我需要得到_id內的對象,通常我會用點符號來做到這一點:_id._str 試圖做的路徑:「/post/:_id._str」輸出: post/ObjectID(「52e16453431fc2fba4b6d6a8」)._ str –

回答

6

您需要更改pathFor 'post'傳遞的ObjectId 52e16453431fc2fba4b6d6a8的十六進制表示,而不是ObjectId('52e16453431fc2fba4b6d6a8')

嘗試是這樣的pathFor 'post' _id=this._id.toHexString

一旦你逝去的十六進制字符串,你可以在你的路由器使用

return Posts.findOne({ _id: new Meteor.Collection.ObjectID(this.params._id)});

+1

這裏_is.toHexString不工作,所以我用:_id = this._id._str – avalla

0

你可以試試這個:

this.route("post", { 
    path: "/post/:stringId", 

    waitOn:function(){ 
     NProgress.start(); 
     Meteor.subscribe("Teams"); 
    }, 

    before: function() { 
     NProgress.done(); 
    }, 

    data: function() { 
     Post = Posts.findOne({_id: Meteor.ObjectId(this.params.stringId)}); 
    } 
}); 

現在,當你去post/52e16453431fc2fba4b6d6a8你應該能夠看到正確的崗位。

我實際上計劃在我的應用程序中使用鐵路由器和objectid,並且認爲這種模式可行。

我還沒有嘗試過,但讓我知道是否有問題,我會創建一個小測試應用程序來解決它。

+0

謝謝生病檢查,mongo風格objectID和meteor ID之間有什麼區別呢? –

+0

這就是我想[找出](https://groups.google.com/forum/#!topic/meteor-talk/f-ljBdZOwPk)。 Mongo的objectid嵌入時間戳。流星是隨機的。流星似乎選擇了一個字符串唯一的ID實現,以便更容易地在路由中使用ID,ID在DOM等。但我不確定具體細節。 –