【问题标题】:understand new mongo id and use it with iron-router了解新的 mongo id 并将其与 Iron-router 一起使用
【发布时间】:2014-01-23 19:30:21
【问题描述】:

我有一个简单的帖子路线,用于查找帖子 _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”模板而不是帖子。

我该如何解决这个问题?

【问题讨论】:

  • 好的,所以 mongo 插入现在在 _id 字段中得到了 objectId 字段,所以我想弄清楚的是如何使 pathFor 工作,我需要在 _id 中获取对象,通常我会用这样的点符号来做:_id._str 试图做路径:“/post/:_id._str”输出:post/ObjectID("52e16453431fc2fba4b6d6a8")._str

标签: mongodb meteor iron-router


【解决方案1】:

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

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

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

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

【讨论】:

  • 这里 _is.toHexString 不起作用,所以我使用了:_id=this._id._str
【解决方案2】:

你能试试这个吗:

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,并认为这种模式会起作用。

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

【讨论】:

  • 谢谢生病检查,mongo风格的objectID和meteor Id到底有什么区别?
  • 这就是我想要的figure out。 Mongo 的 objectid 类型嵌入了时间戳。流星是随机的。 Meteor 似乎选择了仅字符串 id 实现,以便更容易在路由中使用 id,在 dom 中使用 id 等。但我也不确定具体细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 2017-06-17
相关资源
最近更新 更多