Node.js:如何在错误事件时处理域模块中的请求对象

Node.js: How to handle request object in domain module on error event

本文关键字:模块 处理 对象 请求 事件 js 错误 Node      更新时间:2023-09-26

我有一些http服务器,这是由域模块包装。服务器在某些请求上发送错误。是否有任何方法来获取引起错误的请求对象?

var http = require('http');
var domain = require('domain');
var d = domain.create();
d.on('error', function(err) {
    console.error("Sorry, dude, we have a problem");
    console.error(err.stack);
});
d.run(function() {
        http.createServer(function(req, res) {
            someBadFunction();
            res.end();
        }).listen(8080);
    }
);

您可以将请求添加到域中,并在错误处理程序中将其过滤:

d.on('error', function(err) {
  var req = d.members.filter(function(member) {
    return member instanceof http.IncomingMessage;
  })[0];
  d.remove(req);
  ...
});
d.run(function() {
  http.createServer(function(req, res) {
    d.add(req);
    someBadFunction();
    res.end();
  }).listen(8080);
});

然而,如果我要使用域(它们已被弃用),我会为每个请求创建一个新域(按照本文档),而不是将每个请求添加到顶级域,因为我认为上面的代码将无法正常工作,任何合理数量的请求进入