4

我有一个简单的帖子路线来寻找帖子_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});
        }
    });

目前,它创建了一个hreflike :

 post/ObjectID("52e16453431fc2fba4b6d6a8")

点击它会打开一个网址

post/ObjectID("52e16453431fc2fba4b6d6a8") 

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

我怎样才能解决这个问题?

4

2 回答 2

6

您需要更改pathFor 'post'以传递 ObjectId 的十六进制表示,52e16453431fc2fba4b6d6a8而不是ObjectId('52e16453431fc2fba4b6d6a8')

尝试这样的事情pathFor 'post' _id=this._id.toHexString

传递十六进制字符串后,您可以在路由器中使用它

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

于 2014-05-01T22:03:03.660 回答
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,并认为这种模式会起作用。

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

于 2014-01-25T18:28:03.183 回答