了解新的mongo id并将其与铁路由器一起使用

时间:2014-01-23 19:30:22

标签: mongodb meteor iron-router

我有一个简单的邮寄路线,可以查找帖子_id。 问题是pathFor助手创建了这样的路径:

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")

点击它会打开一个网址

post/ObjectID("52e16453431fc2fba4b6d6a8") 

但是,我得到了“NotFound”模板而不是帖子。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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 :(得分: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时,你应该可以看到正确的帖子。

我实际上计划在我的应用程序中使用iron-router和objectid,并认为这种模式可行。

我还没有尝试过,但是如果有问题请告诉我,我会创建一个小测试应用程序来解决它。