Как получить доступ к глобальным переменным области видимости в функциях обратного вызова? [JS] - PullRequest
0 голосов
/ 28 апреля 2018

Для моей регистрации пользователя у меня есть

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 по-прежнему недоступна в моих функциях обратного вызова.

Требует ли пользовательский модуль несколько раз правильного способа сделать это или я что-то упустил?

edit : Внутри функций обратного вызова переменная User не определена.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

К точке @charloetfl, если она находится внутри файла, следует объявить ее вне функции обратного вызова или поверх файла. Если мы говорим о доступе ко всем модулям и файлам в рамках проекта, то добавление его к глобальному объекту - это путь к этому в узле, как упоминали @doug и @andrewl.

0 голосов
/ 28 апреля 2018

Как упоминалось @Doug, вы должны передать global пользовательской переменной следующим образом:

global.user = ...

Этот процесс по существу превращает user в глобально доступную переменную. Вы можете прочитать больше о Node's global здесь, чтобы понять, что он делает, а также понять, каковы его последствия: http://stackabuse.com/using-global-variables-in-node-js/

...