显示来自mongodb的所有数据混合,并在doT.js模板引擎中进行渲染
Show all of data comming from mongodb and render it in doT.js templating engine
我想从mongodb中提取数据并将其传递给视图。一切似乎都正常,但我没有看到所有10000张唱片都出现,只看到了一张。我觉得我离解决它很近了,但我被卡住了。。。我正在使用nodemongodb 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>
如果可以的话,请帮忙。非常感谢。
res.render('index.html',{data:data._id});
的调用会导致为光标中的每个元素重新呈现页面,并且您最终得到页面的最后一次呈现。
迭代时,可以将每个数据存储到数组或链表中。迭代完数组后,可以res.render
并将数组或linkedlist传递到视图中。
好吧,我终于找到了一个解决方案,首先我必须从each()
更改为toArray()
,在那里检索我的数据。然后我把数据串起来。这不是一个理想的解决方案,因为我只是将所有内容打印为一个字符串,而不是遍历模板中的数据。我很高兴我正朝着正确的方向前进。
我的应用程序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>
正如我所说,这不是一个理想的解决方案,但我认为现在我必须让模板引擎本身的高级功能发挥作用。
相关文章:
- 从js引擎的角度来看闭包和构造函数是如何工作的
- 使用Node.js在应用程序引擎上进行本地单元测试
- 自定义警报/弹出窗口和保持JS引擎
- 敲除js外部模板引擎-没有加载模板
- 具体来说,JS引擎对小写和大写区域设置敏感
- PHP还是JS模板引擎?(对于同一html的多个块)
- 科尔多瓦使用什么js“引擎”
- 使用 V8 JavaScript 引擎在没有 Web 视图的情况下执行 JS 库
- JS 正则表达式引擎是正则表达式定向还是文本导向
- 如何将数据从谷歌应用引擎数据存储获取到客户端的角度js中
- 是否可以/明智地使用外部模板引擎,例如 dust.js 或任何其他带有 anjularjs 的模板引擎
- 使用单独的js文件,并在其中使用ASP.NEt MVC 3和Razor视图引擎的Url帮助程序
- JS引擎何时创建垃圾回收根
- Sails Js视图引擎支持布局部分
- 如何列出Typeahead.js和/或Bloodhound引擎的对象
- Nodejs4.x上的ES6代码:V8 4.5是一个直接运行ES6的原生JS引擎吗
- 显示来自mongodb的所有数据混合,并在doT.js模板引擎中进行渲染
- 不使用模板引擎(node.js)将数据从数据库发送到客户端
- PHP+JS的模板引擎,但是
- 如何使用splash-js模板引擎访问嵌套对象