将用户名传递给路由器参数

Passing Username to Router Parameters

所以我想创建一个用户个人资料,列出用户发布的帖子。我的问题是通过路由器将每个用户名传递到 Meteor.publish/subscribe。我不断收到 "username undefined"

我想我的问题是:Iron Router 如何知道 "this.params.username" 是什么? url 应该提供吗?

路由器

Router.route('userProfile',{
   path: '/:username',
   waitOn: function () {
     return Meteor.subscribe('userprofile', this.params.username)},
   data: function () {return {posts:Posts.find({username: this.params.username})};},
});

Meteor.publish

Meteor.publish('userprofile', function () {
  return Posts.find({username: this.params.username});
});

模板

<template name="userProfile">
 <div class="posts">
  {{#each posts}}
   {{> postItem}}
  {{/each}}
 </div>
</template>

您的路由代码是正确的,如果您 console.log waitOndata 中的用户名,您应该得到正确的值。

Router.route('userProfile', {
  path: '/:username',
  waitOn: function () {
    console.log('waitOn', this.params.username);
    return Meteor.subscribe('userprofile', this.params.username);
  },
  data: function () {
    console.log('data', this.params.username);
    return {
      posts: Posts.find({username: this.params.username})
    };
  }
});

但是,您在发布函数中获取参数的方式是错误的,您应该像这样重写您的发布:

Meteor.publish('userprofile', function (username) {
  return Posts.find({username: username});
});

您在发布名称后发送到 Meteor.subscribe 的参数将作为参数传递给发布函数。