expressJS: неправильно заданы соглашения о параметрах маршрутизации REST? - PullRequest
0 голосов
/ 23 ноября 2018

Я работаю над демо-проектом и имею простую, но раздражающую проблему с одним из моих маршрутизаторов.

Для проекта идентификаторы передаются как параметры 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) вместо того, чтобы создавать отдельные представления с одинаковымиданные.Тем не менее: является ли это наиболее распространенной передовой практикой в ​​отрасли?Если нет, то что подойдет?

Заранее спасибо за ваши комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...