首页 > 解决方案 > 从 mongodb 获取数据后渲染模板

问题描述

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"
    }
]

标签: arraysnode.jstemplateshandlebars.jseach

解决方案


渲染必须在回调函数中:

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();
    });

});

});

推荐阅读