无法在适当的时间在域上调用处理

我在domain模块有问题。 目前,我正在尝试捕获请求中引发的任何未被捕获的错误。 使用express中间件和域。 所有的请求都是通过这个函数路由的,然后再调用nextpath。

 app.use (req, res, next) -> domain = createDomain() domain.on "error", (err) -> res.send(500) domain.dispose() domain.enter() next() 

问题是,如果从不抛出错误,我该如何处理域名呢?

我可以把中间衣以外的领域和活动吊起来,这样我就不用去处理了,但是我不会再有中间衣物,所以我需要发500个衣服。

有没有人有更好的解决scheme,我如何处理这个? 我花了太多的时间试图找出一个办法(和许多hacky的方式)来处理这个问题。 谢谢。

如果没有发生错误,则不需要调用domain.dispose()domain.dispose()的目的是清除在跳出堆栈中间后处于不确定状态的任何资源,并且压制由于不良状态而发生的后续错误。 domain.enter()的反向调用就是domain.exit()

这就是说,浏览域的代码,看起来你不想使用domain.enter / exit这种方式。 每个domain.enter / exit对应于域模块代码中共享数组的堆栈推送/popup。 因此,例如,如果第二个请求在第一个请求完成之前进入,然后第一个请求在第二个请求完成之前退出,那么在第一个域处理程序中调用exit将popup第二个请求的域。 进入和退出似乎很可能不应该跨asynchronous的东西分裂。

你有没有尝试简单地使用domain.run(next) ? 这似乎是对我的伎俩。 它基本上为你进入域,然后调用你给它的callback,然后在callback返回后立即退出域。 您在域中创build的任何定时器或事件发射器也将自己与该域关联。 当调用事件处理程序时,事件发射器也使用类似的input – 呼叫 – 退出模式。 它出现在代码中,它不是跟踪事件处理程序的域,而是跟踪域的事件处理程序。

简而言之,不要尝试将input和configuration配对,也不要尝试在asynchronous边界之间使用input/输出。 使用运行/绑定/添加/删除。