Визуализация шаблона после извлечения данных из mongodb - PullRequest
0 голосов
/ 27 апреля 2018
app.get('/clients', (req, res) => {
    var clientArray;

    MongoClient.connect('mongodb://localhost:27017/Clients', (err, db) => {
        if (err) {
            return console.log('Unable to Connect');
        }
        console.log('Connected to Mongodb server');
        db.collection('Clients').find().toArray().then((docs) => {
            clientArray = JSON.stringify(docs, undefined, 2);
            // clientArray = docs;
            console.log(clientArray);
        }, (err) => {
            console.log("ERROR")
        });
        db.close();
    });
    res.render('clients.hbs', {
        infoArray: clientArray,
        name: 'Harshit'
    });
});

Здесь функция res.render вызывается перед получением необходимых данных из базы данных mongodb. Я хочу передать данные, извлеченные в виде массива, в шаблон руля.

{{#each infoArray}}
        <h1>{{this.name}}</h1>
        {{this.region}}
        {{/each}}

Здесь я пытаюсь просмотреть обработанный массив и отобразить данные. Любая справка приветствуется. Структура массива

[{
        "name": "harshit",
        "region": "delhi"
    },
    {
        "name": "mendax",
        "region": "ecuador"
    }
]

Ответы [ 2 ]

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

Вы почти у цели.

Это происходит потому, что MongoClient.connect(.. является асинхронным. Таким образом, вы res.render выполняете до этого.

Что вам нужно, просто переместите res.render внутрь этого блока

app.get('/clients', (req, res) => {
    var clientArray;

    MongoClient.connect('mongodb://localhost:27017/Clients', (err, db) => {
        if (err) {
            return console.log('Unable to Connect');
        }
        console.log('Connected to Mongodb server');
        db.collection('Clients').find().toArray().then((docs) => {
            clientArray = JSON.stringify(docs, undefined, 2);
            // clientArray = docs;
            res.render('clients.hbs', {
                infoArray: clientArray,
                name: 'Harshit'
            });
        }, (err) => {
            console.log("ERROR")
        });
        db.close();
    });

});
0 голосов
/ 27 апреля 2018

Визуализация должна быть в функции обратного вызова:

app.get('/clients', (req, res) => {
var clientArray;

MongoClient.connect('mongodb://localhost:27017/Clients', (err, db) => {
    if (err) {
        return console.log('Unable to Connect');
    }
    console.log('Connected to Mongodb server');
    db.collection('Clients').find().toArray().then((docs) => {
        clientArray = JSON.stringify(docs, undefined, 2);
        // clientArray = docs;
        console.log(clientArray);
         db.close();

        res.render('clients.hbs', {
          infoArray: clientArray,
          name: 'Harshit'
        });

    }, (err) => {
        console.log("ERROR")
         db.close();
    });

});

});
...