Я работаю над демо-проектом и имею простую, но раздражающую проблему с одним из моих маршрутизаторов.
Для проекта идентификаторы передаются как параметры URL.Проект назначает частные представления пользователям (маршрутизируемые как /user/:userid/
), общие представления (например, маршрутизируемые как /group/:grouid/profile
) и представления, которые являются частными для пользователя, но которые будут обмениваться данными с общими представлениями в режиме реального времени (например, маршрутизируются как /group/:groupid/:userid/
).
В настоящее время у меня есть простой код авторизации промежуточного программного обеспечения, который запрещает незарегистрированным пользователям посещать групповые или частные просмотры пользователей, чтобы просматривать просмотры, в которых они не зарегистрированы.Сводка кода выглядит следующим образом:
authorizationFunctionGroups: function(req, res, next) {
console.log('in middleware authorizationFunctionGroups');
console.log('userid', req.params.userid);
if (!_.isEmpty(registers.groups) && _.get(registers.groups, req.params.groupid)) {
//console.log(registers.groups[req.params.groupid]);
console.log(registers.groups[req.params.groupid]['membersuserid']);
registers.groups[req.params.groupid]['membersuserid'].indexOf(req.params.userid) > -1 ? next() : next(new Error("userid invalid or not in the group"));
} else {
next(new Error('Invalid groupid'));
}
}
Однако, когда я вызываю маршрутизатор профиля группы (/group/:grouid/profile
) из некоторых разделов моего интерфейса, используя следующий код:
$('#button1').click(() =>; window.location = '.../group/' + url.pathname.split('/').slice(-2)[0] + '/profile');
маршрутизаторы запутались, пропустив мой вызов через промежуточное ПО авторизации и вызвав ошибку ( «идентификатор пользователя недействителен или отсутствует в группе» ).
Вызов отклоняется, потому что, когда метод внешнего интерфейса передает вызов бэкенду, мое соглашение о маршрутизации застревает, поскольку он не распознает второй параметр этого вызова («профиль») как пользователя.
Хак, который я нашел, чтобы решить эту проблему, состоит в том, чтобы изменить мой текущий маршрутизатор /group/:groupid/profile
на /group/:groupid/profile/profile
, что мне не нравится.
Я должен заменить приведенный выше код на:
Промежуточное программное обеспечение
authorizationFunctionGroups: function(req, res, next) {
console.log('in middleware authorizationFunctionGroups');
console.log('userid', req.params.userid);
if (req.params.userid == 'profile') { ///?????????
res.redirect('/group/' + req.params.groupid + '/profile/profile');
} else if (!_.isEmpty(registers.groups) && _.get(registers.groups, req.params.groupid)) {
//console.log(registers.groups[req.params.groupid]);
console.log(registers.groups[req.params.groupid]['membersuserid']);
registers.groups[req.params.groupid]['membersuserid'].indexOf(req.params.userid) > -1 ? next() : next(new Error("userid invalid or not in the group"));
} else {
next(new Error('Invalid groupid'));
}
},
Внешний интерфейс
$('#button1').click(() =>; window.location = '.../group/' + url.pathname.split('/').slice(-2)[0] + '/profile/profile');
Два вопроса
Очевидно, что моя главная проблема - обычная.Любые советы / ресурсы о том, как заказать / назвать мои маршрутизаторы?
Я пытаюсь сохранить единое представление для всех (group /: groupid / profile) вместо того, чтобы создавать отдельные представления с одинаковымиданные.Тем не менее: является ли это наиболее распространенной передовой практикой в отрасли?Если нет, то что подойдет?
Заранее спасибо за ваши комментарии.