[英]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.