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对象中访问该变量,如中所述。希望这有帮助。