Mam poniżej kod, którego używam w mojej aplikacji Express.js do scentralizowania niektórych operacji acl. Jeśli funkcja zwraca true
lub false
jawnie oprogramowanie pośredniczące może obsłużyć wywołanie next
. Ale jeśli nie powróci, to do autoryzowanej logiki, aby wykonać next()
, gdy skończy się to robić.Wycieki pamięci Node.js?
Aby uniknąć konieczności wypisywania danych o błędach, chcę po prostu przekazać funkcję error()
, która może być wywołana, która po prostu wywołuje funkcję wewnętrznie next
.
Ktoś powiedział mi, że może to prowadzić do pewnych wycieków pamięci, ponieważ funkcja next
znajduje się w swoim zamknięciu i odwołuje się do niej z zewnątrz. Widzę podobne techniki używane w wielu przykładach w Internecie, ale wciąż jestem nowy w Node.js, więc zastanawiam się, czy jest w tym jakaś prawda?
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: Usuń zmienne
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();
}
});
Czy mogę zapytać, dlaczego chcesz, aby metoda autoryzacji obsługiwała wywołanie 'next'? Jaka sytuacja by się przydała? – shennan