У меня есть код ниже, который я использую в своем приложении Express.js для централизации некоторой логики acl. Если функция возвращает true
или false
явно, промежуточное программное обеспечение может обрабатывать вызов next
. Но если он не возвращает его в логику авторизации для выполнения next()
всякий раз, когда он заканчивает делать это.
Чтобы избежать необходимости записывать данные об ошибках, я хочу просто передать функцию error()
, которая может быть вызвана, которая просто вызывает внутреннюю функцию next
.
Кто-то сказал мне, что это может привести к некоторым утечкам памяти, так как функция next
находится в ее собственном закрытии и ссылается на нее извне. Я вижу, что подобные методы используются во многих примерах в Интернете, но я все еще новичок в Node.js, поэтому задаюсь вопросом, есть ли в этом правда?
this.router.use(function (req, res, next) {
var err = {
code: 403,
exception: 'UnauthorizedException',
data: {}
},
error = function () {
next(err);
},
authorize = app.route.authorize(req, res, next, error);
if (authorize === false) {
next(err);
}
else if (authorize === true) {
next();
}
});
ИЗМЕНИТЬ: удалить переменные
this.router.use(function (req, res, next) {
var authorize = app.route.authorize(req, res, next, function () {
next({
code: 403,
exception: 'UnauthorizedException',
data: {}
});
});
if (authorize === false) {
next({
code: 403,
exception: 'UnauthorizedException',
data: {}
});
}
else if (authorize === true) {
next();
}
});