簡體   English   中英

顯示來自mongodb的所有數據並將其呈現在doT.js模板引擎中

[英]Show all of data comming from mongodb and render it in doT.js templating engine

我想從mongodb中提取數據並將其傳遞給視圖。 一切似乎都正常,但是我沒有看到所有的10000條記錄,而是看到了一條。 我覺得我已經很接近解決它了,但是我陷入了困境……我正在使用node-mongodb-native,express和dot.js來實現我的目標。

這是我的app.js,尋找所有動作所在的app.get():

    /**
 * Mongo DB
 */
var mongodb = require('mongodb'),
    serverdb = new mongodb.Server('127.0.0.1', 27017, {}),
    dbName = new mongodb.Db('test', serverdb, {});
/**
 * Module dependencies.
 */
var express = require('express'),
    doT = require('doT'),
    app = express.createServer(),
    pub = __dirname + '/public',
    view =  __dirname + '/views';

// Configuration
app.configure(function(){
    app.set('views', view);
    app.set('view options', {layout: false});
    app.set('view engine', 'html');
    app.use(app.router);
});

//Simple templating
app.register('.html',doT, {
    compile: function(str, opts){
        return function(locals){
            return str;
        }
    }
});


//----------------- This is where the problem is i think ---------------
app.get('/', function(req, res){
    dbName.open(function (error, client) {
        var collection = new mongodb.Collection(client, 'personnel');
        collection.find().each(function(err, data){
            //Error check
             if (err){return res.end('error!'+err);}
            //Data
             if (data){
                res.render('index.html',{data:data._id});
             } else {
                 res.end();
             }
        });
    });
});
//--------------------------------------------------------------


app.configure('production', function(){
    app.use(express.errorHandler());
});
app.listen(3000);
console.log('Express server listening on port %d in %s mode', app.address().port, app.settings.env);

這是我的html:

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Index</title>
</head>
<body>
    {{=it.data}}
</body>
</html>

如果可以的話請幫忙。 謝謝。

我對dot.js模板引擎一無所知。 但我想您會調用res.render('index.html',{data:data._id}); 導致為光標中的每個元素重新呈現頁面,並且最終導致頁面的最后呈現。

好吧,我終於找到了解決方案,首先我必須從each()更改為toArray() ,在其中檢索我的數據。 然后我將數據進行字符串化。 這不是理想的解決方案,因為我只是將所有內容打印為一個字符串,而不是遍歷模板中的數據。 我很高興我朝着正確的方向前進。

我的app.js:

編輯 :找到了更好的解決方案。

    //Replace this code with the one in my question to get full file
    //----------------- This is where the problem was ---------------
    app.get('/', function (req, res) {
        dbName.open(function (error, client) {
            var collection = new mongodb.Collection(client, 'some_collection');
            collection.find().limit(300).toArray(function (err, dataObjArr) {
                var data = '';
                var dataArr = [];
                var i = dataObjArr.length;
                //check for error
                if(err){return res.end('error!'+err);}
                //Data
                if (dataObjArr) {
                    while(i--){
                        dataArr[i] = dataObjArr[i]._id;
                    }
                    data = dataArr.join(' ');
                    res.render('index.html', { returnedData : data });
                }else{
                    res.end();
                }
            });
        });
    });
    //--------------------------------------------------------------

我的index.html:

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Index</title>
</head>
<body>
    {{=it.returnedData}}
</body>
</html>

就像我說的那樣,這不是理想的解決方案,但是我認為現在我必須使用模板引擎本身的高級功能。

迭代時,可以將每個數據存儲到數組或鏈表中。 完成對數組的迭代之后,您可以res.render並將數組或鏈表傳遞到視圖中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM