Nodejs AsyncLocalStorage getStore() return 未定义

Nodejs AsyncLocalStorage getStore() return undefined

我读了这个post AsyncLocalStorage for Easy Context Passing in Node.js 我尝试在我的日志中获取 logId,但我不能,因为 asyncLocalStorage.getStore() return 未定义。 似乎上下文在 MyLogger class 中丢失了。 如何解决?

这是我的快递应用程序

  const asyncLocalStorage = new AsyncLocalStorage();

  app.use((req, res, next) => {
          asyncLocalStorage.run(new Map(), () => {
            asyncLocalStorage.getStore().set("requestId", uuid());
            next();
          });
        });
    
    module.exports.asyncLocalStorage = asyncLocalStorage;

这是 MyLogger class

   static log(logId, className, text) {
    const { asyncLocalStorage } = require("../server.js");
    const store = asyncLocalStorage.getStore()
    console.log(this._getBaseStaticLog(logId, logTypes.LOG, text, className));
  }

我解决了问题。 问题是由于 bodyparser 中间件,我失去了上下文。 我在设置上下文之前更改了该中间件,现在可以了。 是:

app.use((req, res, next) => {
  asyncLocalStorage.run(new Map(), () => {
    asyncLocalStorage.getStore().set("requestId", uuid());
    next();
  });
});

// body parser
app.use(
  bodyParser.json({
    limit: "10mb"
  })
);

变化:

// body parser
app.use(
  bodyParser.json({
    limit: "10mb"
  })
);

app.use((req, res, next) => {
  asyncLocalStorage.run(new Map(), () => {
    asyncLocalStorage.getStore().set("requestId", uuid());
    next();
  });
});

现在可以了)