显式绑定

有时,正在使用的域(domain)不是应该被用于一个特定的事件触发器的其中之一。或者,该事件触发器可能已在一个域的上下文中创建,但应该代替绑定到一些其他的域上。

例如,可能有一个正在被 HTTP 服务器使用的域,但也许我们想为每个请求使用一个单独的域。

这可以通过显式绑定实现。

例如:

  1. // create a top-level domain for the server
  2. const domain = require('domain');
  3. const http = require('http');
  4. const serverDomain = domain.create();
  5. serverDomain.run(() => {
  6. // server is created in the scope of serverDomain
  7. http.createServer((req, res) => {
  8. // req and res are also created in the scope of serverDomain
  9. // however, we'd prefer to have a separate domain for each request.
  10. // create it first thing, and add req and res to it.
  11. var reqd = domain.create();
  12. reqd.add(req);
  13. reqd.add(res);
  14. reqd.on('error', (er) => {
  15. console.error('Error', er, req.url);
  16. try {
  17. res.writeHead(500);
  18. res.end('Error occurred, sorry.');
  19. } catch (er) {
  20. console.error('Error sending 500', er, req.url);
  21. }
  22. });
  23. }).listen(1337);
  24. });