Meteor にユーザー プロファイルがあります。
フロールーターを使用しています。
ユーザーがすべてのルートに存在するかどうかを確認したい。
私が試してみました
const userRedirect = ( context, redirect, stop ) => {
let userId = FlowRouter.getParam( 'userId' );
if ( Meteor.users.find( { _id: userId } ).count() === 0 ) {
FlowRouter.go( 'userList' );
}
};
const projectRoutes = FlowRouter.group( {
name: 'user',
triggersEnter: [ userRedirect ]
} );
userRoutes.route( '/users/:userId', {
name: 'userDetail',
action: function ( params, queryParams ) {
BlazeLayout.render( 'default', { yield: 'userDetail' } );
},
} );
しかし、うまくいきません。
ユーザーコレクションを購読していないためだと思います。
ルートでこれを行うにはどうすればよいですか?使うべきか
const userRedirect = ( context, redirect, stop ) => {
let userId = FlowRouter.getParam( 'userId' );
// subscribe to user
Template.instance().subscribe( 'singleUser', userId );
// check if found
if ( Meteor.users.find( { _id: userId } ).count() === 0 ) {
FlowRouter.go( 'userList' );
}
};
編集
代わりにテンプレートをチェックインしようとしました
Template.userDetail.onCreated( () => {
var userId = FlowRouter.getParam( 'userId' );
Template.instance().subscribe( 'singleUser', userId );
});
Template.userDetail.helpers( {
user: function () {
var userId = FlowRouter.getParam( 'userId' );
var user = userId ? Meteor.users.findOne( userId ) : null;
return user;
},
} );
user
ただし、ユーザー オブジェクトまたは null のいずれかである変数をテンプレートに入力するだけです。
存在しないルートに対して Flow Router が提供する notFound 構成を使用したいと考えています。これは「存在しないデータ」にも適用できると思います。
そのため、ルート パスが/users/:userId
存在し、特定の userId を持つユーザーが存在しない場合、ルーターはルートを無効なパスとして解釈する必要があります。