Tôi có một số mã bên dưới mà tôi đang sử dụng trong ứng dụng Express.js để tập trung một số logic acl. Nếu hàm trả về true
hoặc false
rõ ràng phần mềm trung gian có thể xử lý cuộc gọi next
. Nhưng nếu nó không trả lại, nó sẽ cho phép logic thực hiện next()
bất cứ khi nào nó hoàn thành công việc của nó.Rò rỉ bộ nhớ Node.js?
Để tránh phải ghi dữ liệu lỗi, tôi chỉ cần chuyển một hàm error()
có thể gọi, mà chỉ cần gọi hàm next
nội bộ.
Một người nào đó nói với tôi rằng điều này có thể dẫn đến một số loại rò rỉ bộ nhớ vì chức năng next
đang ở trạng thái đóng riêng và tham chiếu nó từ bên ngoài. Tôi thấy các kỹ thuật tương tự đang được sử dụng trong rất nhiều ví dụ trực tuyến, nhưng tôi vẫn còn khá mới với Node.js nên tự hỏi liệu có sự thật nào về điều này không?
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: Di chuyển biến
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();
}
});
Tôi có thể hỏi tại sao bạn muốn phương thức ủy quyền xử lý cuộc gọi 'tiếp theo' không? Tình huống này có ích gì? – shennan