Meteor:具有userName URL的路由器?

时间:2016-11-24 11:27:20

标签: javascript meteor iron-router

我在使用用户的用户名创建路径时遇到问题。所以想法是这样的:单击路径并转到该用户配置文件。他的链接应该是这样的:http://www.something.com/usersUsername 我正在阅读并尝试在互联网上找到的所有内容,但很多东西都改变了,所以我无法管理。 我发现唯一有用的是,当页面加载客户端时,请注意"路径首先然后订阅集合所以我得到了,null"为路径。有帮助吗?我的想法是创建一些等待订阅的东西......

套餐铁:路由器 accounts-ui 帐户密码

这是代码:

开始页面,模板:

<template name="početna">
<h1>Dobrodošli!</h1>
<h3>Registrujte se:</h3>
    {{> register}}
<h3>Prijavite se:</h3>
    {{> login}}

{{#if currentUser}}
    <h2>Logovan si!</h2>
    {{> logout}}
    <a href="{{pathFor route='profil' username=username }}">Profil</a>
{{/if}}

路由器JS文件:

    Router.configure({
    layoutTemplate: 'okvir'
});

// *  * * * *  * //

Router.route('/', {
    name: 'početna', 
    template: 'početna',
});

Router.route('/:username',  {
   waitOn: function(){
       return Meteor.subscribe('userData'), Meteor.user().username
          },    
    name: 'profil',
    template: 'profil',

});

简单的HTML模板文件只有在有效时才会显示:

<template name="profil">    
    <h1>RADI</h1>
</template>

谢谢!

2 个答案:

答案 0 :(得分:0)

你走了:

Router.route('/:username',{
    name: 'profil',
    waitOn: function () {
        return Meteor.subscribe('userData', this.params.username)
    },

    action: function () {
        this.render('profil', {
            data: function () {
                return Meteor.users.findOne({username: this.params.username});
            }
        });
    }
});

修改

使用this.params.username,任何人都可以访问该个人资料,无论用户与否。如果您想阻止这种情况,可以使用onBeforeAction()

onBeforeAction: function() {
    if(Meteor.user() && this.params.username == Meteor.user().username){
        this.next();
    } else {
        Router.go('/not-authorized') //or any other route
    }
},

答案 1 :(得分:0)

Luna,谢谢你的帮助! Luna的答案有所帮助但我还需要: 1.)帮助器设置username = username

的值
Template["početna"].helpers({ username: function() { return  Meteor.user().username } })

2。)发布

   Meteor.publish("userData", (username) => {
    return Meteor.users.find({
        username: username
    })
});