是否需要处理node.js域?什么时候应该这样做?

时间:2014-01-15 16:28:07

标签: javascript node.js express node.js-domains

我有一个Express应用程序,我根据收到的每个请求使用域名。我已经添加了一个中间件来确保任何进一步的中间件被执行"内部"域名。

app.use(function(req, res, next) {
    var d = domain.create();

    d.req = req;

    d.add(req);
    d.add(res);

    d.run(next);
});

此外,在处理请求时执行的某些代码使用process.domain.req来获取对初始请求的引用,它的标题,Cookie等等...我正在执行此操作和' #39;我无法将req直接传递给此代码。这个奇怪的代码是一种跨环境代码(对于浏览器和节点),它不知道它的执行位置。在幕后,一些基础层以不同的方式实现Node和浏览器,尤其是网络代码。对于浏览器,它是XMLHttpRequest,对于NodeJS,它是基于request lib的自定义包装器。

我担心内存泄漏。这引用了存储在域中的req。他们可以保留这些东西并让它们不被垃圾收集吗?

另外,我是否需要定期处理域名,或者我是否需要在某些边缘/错误情况下处理它们?

1 个答案:

答案 0 :(得分:3)

通常,您会在错误或完成事件中处置您的域,这是一个示例https://gist.github.com/regality/3061748

但是,根据我的理解,不推荐使用domain.dispose()方法。有关详细信息,请参阅此git问题 - https://github.com/joyent/node/issues/5018

此外,根据doc,建议您在遇到错误时终止域进程。该链接有一个很好的解释和例子。