У меня есть профиль пользователя в Meteor.
Я использую Flow Router.
Я хочу проверить, существует ли пользователь на каждом маршруте.
я пытался
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
, которая является либо объектом пользователя, либо нулевым значением.
Я хочу использовать конфигурацию notFound, предлагаемую Flow Router для несуществующих маршрутов. Я предполагаю, что это также может быть применено к «несуществующим данным».
Таким образом, если путь маршрута равен /users/:userId
, а пользователь с указанным идентификатором пользователя не существует, маршрутизатор должен интерпретировать маршрут как недопустимый путь.