首页 > 解决方案 > JavaScript 回调和变量

问题描述

我有这个代码:

var user;
app.use(
  "/projects",
  (req, res, next) => {
    user = req.user;
    next();
  },
  new DashboardService(user)
);

但是,由于user在回调中重新定义,它的值没有被保存,因此当它创建 a 时DashboardServiceuser返回null。在回调中重新定义时怎么user不能返回?null

这是我的意思的一个例子https://codepen.io/lachie-source/pen/RwaQNgq

标签: javascriptnode.jsexpress

解决方案


回调中的代码在运行时不会执行app.use。仅当您的应用程序使用给定路由发出请求时,它才会稍后(并且多次)执行。因此,user只有在有请求时才分配变量,并为每个新请求重新分配。

对构造函数的调用立即DashboardService发生。该user变量在那个时间点还没有值。


如果要DashboardService为每个请求创建一个单独的实例,则必须在回调函数中执行此操作:

app.use(
  "/projects",
  (req, res, next) => {
    let user = req.user;
    new DashboardService(user); // But why create an object that isn't used
    next();
  }
);

如果您想获得单个用户当前正在与您的应用程序交互的全局状态:这是不可能的,因为您的应用程序可以同时处理不同用户的多个请求。


推荐阅读