【问题标题】:Render template after fetching data from mongodb从 mongodb 获取数据后渲染模板
【发布时间】:2018-10-08 11:29:17
【问题描述】:
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"
    }
]

【问题讨论】:

    标签: arrays node.js templates handlebars.js each


    【解决方案1】:

    你快到了。

    这是因为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();
        });
    
    });
    

    【讨论】:

    • 我明白了。谢谢。
    【解决方案2】:

    渲染必须在回调函数中:

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

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2021-02-26
      • 2018-10-05
      • 1970-01-01
      相关资源
      最近更新 更多