如何使用Iron Router定义包含当前用户的路由?

时间:2013-12-12 23:26:47

标签: meteor iron-router

我对Meteor和铁路由器相当新,我正在尝试创建一个看起来像'/ users / hippomoe / bookmarks / Kj6ecNk7DeW7PmmGA'的路线,其中hippomoe将是当前登录的用户,而Kj6ecNk7DeW7PmmGA将是书签的ID。我尝试过的一些事情是添加一个提供用户名的把手助手

bookmark: function() {
    return {
        _id: this._id,
        user: Meteor.user().username
    };
}

我还尝试在RouteController定义中的数据上下文中定义user:Meteor.user()。用户名。在这两个实例中,我都收到以下错误:“您使用缺少的参数调用了Route.prototype.resolve。”用户“未在params中找到”

我试过找一个例子来说明这种类型的路线(我认为这种路线很常见)。我在StackOverflow上看到的与此相关的其他问题是关于让用户与特定文档相关联而不是当前登录的用户。

似乎我错过了一些简单的东西。有人可以提供/指出一个如何实现这个目标的简单例子吗?

3 个答案:

答案 0 :(得分:1)

我很难理解为什么你需要这样的路线。如果您已经知道登录用户的名称,为什么还需要在路由中再次使用它?或者这是服务器端?在这种情况下,请显示您的路线。

否则,这不起作用:

Router.map(function () {
  this.route('postShow', {
    path: '/users/:ignoreme/bookmarks/_id',
    data: function () {
      var params = this.params;
      var user = Meteor.user().username;
      if (user == params.ignoreme) {
          ...
      } else {
          return "something went wrong";
      }
    }
  });
});

这只是为了允许你想要的url模式,但同样,我不明白为什么你不会只使用URL / user / bookmarks或类似的东西,然后改变逻辑以依赖于Meteor.user()

答案 1 :(得分:0)

我在问题中写过的把手助手

bookmark: function() {
    return {
        _id: this._id,
        user: Meteor.user().username
    };
}
如果我能正确指定pathFor语法,那么

会有效。我的路径应该看起来像这样

{{pathFor 'saveBookmark' bookmark}} 

我无意中遗忘了书签!

答案 2 :(得分:0)

我认为你在_id之前错过了一个':',试试这个:

path: '/users/:ignoreme/bookmarks/:_id',