如何在回调函数中访问全局范围变量? [JS]

时间:2018-04-28 11:39:12

标签: 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);
    });
});

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;

在这里,我必须require模块模型两次。我尝试将User变量设置为程序顶部的全局变量,如

const express = ..., userRouter = ...
var User = ...

但是我的回调函数仍无法访问此User变量。

要求用户模块多次以正确的方式执行此操作,还是我遗漏了某些内容?

编辑:在回调函数中,User变量未定义。

2 个答案:

答案 0 :(得分:1)

正如@Doug所提到的,您应该将spring.datasource.url=jdbc:mysql://localhost:3306/db1 spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.security.oauth2.resource.filter-order=3 spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.properties.hibernate.hbm2ddl.auto = update spring.jpa.properties.hibernate.show_sql=true 传递给用户变量,如下所示:

global

此过程实质上将global.user = ... 转换为全局可访问的变量。您可以在此处详细了解Node的user,了解它的作用以及了解其含义:http://stackabuse.com/using-global-variables-in-node-js/

答案 1 :(得分:1)

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