首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nodejs AsyncLocalStorage getStore()返回未定义

Nodejs AsyncLocalStorage getStore()返回未定义
EN

Stack Overflow用户
提问于 2020-10-13 15:52:25
回答 1查看 935关注 0票数 3

我读了这篇文章,我试图在我的日志中获取logId,但我做不到,因为asyncLocalStorage.getStore()返回未定义。似乎上下文在MyLogger类中丢失了。如何解决?

这是我的express应用程序

代码语言:javascript
运行
复制
  const asyncLocalStorage = new AsyncLocalStorage();

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

这是MyLogger类

代码语言:javascript
运行
复制
   static log(logId, className, text) {
    const { asyncLocalStorage } = require("../server.js");
    const store = asyncLocalStorage.getStore()
    console.log(this._getBaseStaticLog(logId, logTypes.LOG, text, className));
  }
EN

Stack Overflow用户

回答已采纳

发布于 2020-10-14 23:16:39

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

代码语言:javascript
运行
复制
app.use((req, res, next) => {
  asyncLocalStorage.run(new Map(), () => {
    asyncLocalStorage.getStore().set("requestId", uuid());
    next();
  });
});

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

更改:

代码语言:javascript
运行
复制
// body parser
app.use(
  bodyParser.json({
    limit: "10mb"
  })
);

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

现在一切都好了)

票数 6
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64330910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档