Pull to refresh

Comments 15

«Но тогда проверка, авторизирован ли пользователь, будет выглядеть некрасиво...»
В js есть «красивое» приведение к boolean с помощью двух восклицательных знаков:
if(!!req.session.username) {}
В js всё, что находится внутри if, автоматом приводится к boolean. Как, собственно, и в других реализациях ecma.
if (requestedUrl.match(pattern)) ...

Если не используете результат, то лучше «test»

if (pattern.test(requestedUrl)) ...
А чем лучше? Всеравно кусок «найдется» просто не возвращается во втором случае.
Вы, можно сказать, сами ответили на свой вопрос.
test — функция, по логике своей, возвращающая бинарное значение.
if — условный оператор использующий на вход тоже самое.
Вам не кажется, что они отлично подходят друг другу? :-)

Конкретно в этом случае разница по скорости ничтожна, но в целом считаю test более уместным для таких вещей. В любом случае отработает не медленней, а то и быстрее в зависимости от регулярки и количества возвращенных данных.

Просто если лишь в этом дело, тогда ладно. Разница еще в том что test запоминает позицию, и это свойство может повлечь за собой в дальнейшем ошибки, поэтому я всегда match использую =) Просто думал что может какая-то серьезная разница.
Если цель статьи просто показать как проверять авторизован ли пользователь или нет используя «прослойки», то имхо сильно заумно получилось.

Ну и само написание кода вызывает нарекания.
Как вариант. Но я использую другой подход, который даёт больше гибкости — проверка на уровне прослоек маршрутов:
var //...
    middleWare_isLogged = [auth.checkUser],
    middleWare_canEditUsers = [auth.checkUser, auth.hasPrivilege('editUsers')];

app.get('/', function (req, res) {
// просто отдаём страницу

// some code here
});

app.get('/users', middleWare_isLogged, function (req, res) {
// проверям, залогинен ли пользователь

// some code here
});

app.post('/users/edit', middleWare_canEditUsers, function (req, res) {
// проверяем, имеет ли залогиненый пользователь привилегию "editUsers"

// some code here
});
подскажите пожалуйста, что такое auth?
Отдельный рукописный модуль — auth.js, в котором как раз и описаны функции проверки.
Могу описать подробнее, если надо.
UFO just landed and posted this here
        hasPrivilege: function (priv) {
            return function (req, res, next) {

// тут всяко-разные проверки - по свойствм req.session смотрим, имеет ли данный 
// пользователь привилегию priv и если да - result=true.
// ну а далее либо просто передаём управление дальше если всё ок, 
// либо передаём ошибку "недостаточно прав"

                if (result) {
                    next(); 
                }
                else {
                    next({ msg: const.ERR_AUTH_PERMISSION_DENIED, status: 403 });
                }
            };
        }
UFO just landed and posted this here
Sign up to leave a comment.

Articles

Change theme settings