Node.js内存泄漏?

我在我的Express.js应用程序中使用一些代码,以集中一些acl逻辑。 如果函数显式返回truefalse则中间件可以处理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(); } }); 

编辑:删除variables

 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(); } }); 

       

网上收集的解决方案 "Node.js内存泄漏?"

当你设置中间件的时候, .use()方法被调用一次,匿名处理器/中间件被写入一次内存,这就是为每个新的请求调用的中间件函数。

每当中间件运行时, errvariables就会被实例化,这是一个不同的对象。 如果你把它放在.use()的closures范围之外,它将会是同一个对象。

然后传递给nextnext很可能是另一个中间件函数,它被实例化了一次,并且在内存中保持不变,这个函数坚持并抓取到它的闭包访问。

但是,当下next函数结束运行时, err指向的对象将失去其引用 – 应该被垃圾收集。