Javascript 如何在回调函数中访问全局作用域变量?[JS]

Javascript 如何在回调函数中访问全局作用域变量?[JS],javascript,express,asynchronous,scope,callback,Javascript,Express,Asynchronous,Scope,Callback,对于我的用户注册,我有 const express = require ('express'); const userRouter = express.Router (); userRouter.get ('/', function getUserList (req, res) { let User = require ('../models').User; User.find ({}, function (err, list) { res.json (list

对于我的用户注册,我有

const express = require ('express');
const userRouter = express.Router ();

userRouter.get ('/', function getUserList (req, res) {
    let User = require ('../models').User;
    User.find ({}, function (err, list) {
        res.json (list);
    });
});

userRouter.post ('/', function createUser (req, res) {
    let User = require ('../models').User;
    if (req.body.username && req.body.password)
        User.create (req.body, function (err, user) {
            res.json (user);
        });
});

... 3 more functions with the same `let User` ...

module.exports = userRouter;
在这里,我必须
两次要求
模块模型。我尝试将用户变量设置为程序顶部的全局变量,如

const express = ..., userRouter = ...
var User = ...
但是,在回调函数中仍然无法访问此用户变量

多次要求用户模块是正确的方法还是我遗漏了什么


编辑:在回调函数中,用户变量是未定义的。

正如@Doug所提到的,您应该将
global
传递给用户变量,如下所示:

global.user = ...


这个过程实质上将
user
转化为一个全局可访问的变量。您可以在此处阅读有关节点的
全局
的更多信息,以了解它的功能以及它的含义:

正如@Doug所提到的,您应该像下面这样将
全局
传递给用户变量:

global.user = ...



这个过程实质上将
user
转化为一个全局可访问的变量。您可以在此处阅读更多有关节点的
全局
的信息,以了解它的功能以及它的含义:

到@charloetfl的点(如果它正好位于文件中),在回调之外或文件顶部声明它应该做什么。如果我们谈论的是对项目中所有模块和文件的访问,那么将其添加到全局对象是在节点中进行访问的方式,如@doug和@andrewl所述。

到@charloetfl的点,如果它只是在文件中,则在回调之外或在文件顶部声明它应该可以。如果我们谈论的是对项目中所有模块和文件的访问,那么将其添加到全局对象是在节点中进行访问的方式,如@doug和@andrewl所述。

没有理由在回调之外声明时不应访问它。发生了什么错误?我认为节点有一个特殊的全局变量global.User=。。。你能展示一下你的
模型
文件中有什么吗?@Doug本来想发布的,但是你先提到了它,所以我认为你应该发布它作为一个答案。没有理由在回调之外声明时不应该访问它。发生了什么错误?我认为节点有一个特殊的全局变量global.User=。。。你能展示一下你的
模型
文件中有什么吗?@Doug本来想发布的,但是你先提到了,所以我认为你应该发布它作为答案。不,你不应该使用全局变量。“模块级常量应该足够了。”Bergi同意。我提供的链接中也提到了这一点。但他们也展示了哪些情况可能需要使用全局变量。是的,我只是说这不是这些情况之一。这将使我的用户变量在所有模块中都可以访问,对吗?我不希望这样,我希望它可以在同一模块的回调中访问。这不会发生,因为回调表示用户变量未定义。不,不应该使用全局变量。“模块级常量应该足够了。”Bergi同意。我提供的链接中也提到了这一点。但他们也展示了哪些情况可能需要使用全局变量。是的,我只是说这不是这些情况之一。这将使我的用户变量在所有模块中都可以访问,对吗?我不希望这样,我希望它可以在同一模块的回调中访问。这不会发生,因为回调表示用户变量未定义。在外部声明用户会导致回调函数表示用户变量未定义。因为在节点开发中也不建议使用全局变量,我建议在app.locals中创建用户变量,以便可以通过req.app.locals在req对象中访问该变量,如中所述。希望这会有所帮助。在外部声明用户会导致回调函数指出用户变量未定义。由于在节点开发中也不建议使用全局变量,因此我建议在app.locals中创建用户变量,以便可以通过req.app.locals在req对象中访问该变量,如中所述。希望这有帮助。