заполнить переменные промежуточным ПО Express JS

Я пытаюсь заполнить переменную промежуточным программным обеспечением, которое получает информацию через запрос json, и храню ее в глобальной переменной, которую позже использую при рендеринге с pug, но ошибка первой загрузки возвращает пустую переменную, Как я могу убедиться, что он загружен до просмотра. вот мой код

function fillVars(req, res, next){
     var urlCandidates = "https://web.com/count_by?group=true";
    request({url: urlCandidates,json: true }, function (error, response, body) {
    if (!error && response.statusCode === 200) {
        jsonTwiteros = body;
        }
    });
    next();
}
// function to call render
function render(req, res, next){
    console.log("Ingreso a render");
    res.render('main',{total:jsonTwiteros } );
        next();
}
function  close(req, res, next){
    res.end();
}
//set route 
app.get('/',fillVars, render,close);
0
задан 20.01.2017, 17:34
0 ответов

Когда ты будешь верить в middleware, next () значит, что request может продолжать путешествовать. Главным образом твоя ошибка эта, в которой next должен бы быть внутри callback request, так как а ты не надеешься на то, что этот заканчивается, чтобы говорить ему, постоянная с твоей дорожкой.

Он рекомендовал бы тебе переменная добавлять ее к response, acordate, который next () продолжает с тем же response. У Express есть переменная внутри response особенно чтобы реализовывать эти вещи.

Этот varialbe называется: locals. Эта находится внутри response. Ты был бы должен делать следующее:

function fillVars(req, res, next){
    var urlCandidates = "https://web.com/count_by?group=true";

    //Ejecuto el request
    request({
        url: urlCandidates,
        json: true
    }, function (error, response, body) {
        //Guardo el body
        res.locals.jsonTwiteros = (!error && response.statusCode === 200) ? body : {};

        //Una vez que terino el request y guarde la respuesta continuo con el request
        next();
    });
}
// function to call render
function render(req, res, next){
    res.render('main',{
        total: res.locals.jsonTwiteros
    } );

    next();
}

function close(req, res, next){
    res.end();
}

app.get('/',fillVars, render,close);
0
ответ дан 03.12.2019, 17:36

Теги

Похожие вопросы