Meteor:具有 URL 用户名的路由器?
Meteor: Router with URL of a userName?
我在使用用户的用户名创建路由时遇到问题。所以想法是这样的:单击路径并转到该用户配置文件。他的 link 应该是这样的:http://www.something.com/usersUsername
我正在阅读并尝试我在互联网上找到的关于此的所有内容,但很多东西都发生了变化,所以我无法处理这个。
我发现唯一有用的是,当页面首先加载客户端 ,watch" 路径然后订阅一个集合时,我得到了 ,null" 作为路径。有什么帮助吗?我的想法是创建一些等待订阅的东西...
Packages: iron:router , 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>
谢谢!
给你:
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
}
},
露娜,谢谢你的帮助! 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
})
});
我在使用用户的用户名创建路由时遇到问题。所以想法是这样的:单击路径并转到该用户配置文件。他的 link 应该是这样的:http://www.something.com/usersUsername 我正在阅读并尝试我在互联网上找到的关于此的所有内容,但很多东西都发生了变化,所以我无法处理这个。 我发现唯一有用的是,当页面首先加载客户端 ,watch" 路径然后订阅一个集合时,我得到了 ,null" 作为路径。有什么帮助吗?我的想法是创建一些等待订阅的东西...
Packages: iron:router , 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>
谢谢!
给你:
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
}
},
露娜,谢谢你的帮助! 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
})
});