Передать объект, инициализированный через промежуточное ПО Express, следующему промежуточному ПО - PullRequest
1 голос
/ 28 октября 2019

Ниже приведены мои настройки, я пытаюсь передать объект, который инициализирован в промежуточном программном обеспечении Express, другой функции промежуточного программного обеспечения. В моем маршрутизаторе вызовите helper.getValues ​​() и получите ошибку, из-за которой я не могу вызвать функцию getValues ​​из неопределенного

let helper; // no initial value

const getConfig = async () => {
    config = await service.getConfig(configName);
    helper = new Helper(config);    // Helper is correctly initialized here
};

// declare a new express app
let app = express();


app.use(async function (req, res, next) {
    try {        
        await getConfig(); // invoke the code that initializes my helper       
        next();
    } catch (e) {
        console.error(e);
    }
});


app.use('/path', MyRouter(helper)); // Pass helper to router - it's undefined in router code

Мой конструктор маршрутизатора выглядит следующим образом

function MyRouter(helper) {
   ...
   ... const values = helper.getValues();
}

Что является правильнымспособ передать помощник, созданный в getConfig, моему маршрутизатору?

1 Ответ

1 голос
/ 28 октября 2019

Передайте его через req или res в зависимости от вашего намерения.

Если данные относятся к запросу, например, к идентификатору запрашивающего пользователя, атрибутам сеанса, geoIP или проанализированному телу запроса, затем присоедините егок объекту req:

Если данные относятся к обработке ответа, такой как переменные, используемые шаблонами / представлениями или запрошенному формату ответа, то присоедините их к объекту res.

Предполагая, что выхотите передать через req:

req.helper = await getConfig();

Затем использовать его:

function router (req, res) {
    const values = req.helper.getValues();

    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...