У меня есть код ниже, который я использую в своем приложении Express.js для централизации некоторой логики acl. Если функция возвращает true
или false
явно, промежуточное ПО может обрабатывать вызов next
. Но если он не возвращается, то до логики авторизации следует выполнить next()
всякий раз, когда это будет сделано.Утечки памяти Node.js?
Чтобы избежать необходимости записывать данные об ошибке, я хочу просто передать функцию 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();
}
});
EDIT: Удалить переменными
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();
}
});
Могу ли я спросить, почему вы хотите, чтобы метод authorize обрабатывал вызов 'next'? Какая ситуация была бы полезной? – shennan