Javascript 显示来自mongodb的所有数据提交,并在doT.js模板引擎中呈现
我想从mongodb中提取数据并将其传递给视图。一切似乎都正常,但我看到的不是全部10000张唱片,而是一张。我觉得我很快就要解决它了,但我被卡住了。。。我正在使用node mongodb native、express和dot.js来实现我的目标 这是我的app.js,查找app.get(),所有操作都在这里:Javascript 显示来自mongodb的所有数据提交,并在doT.js模板引擎中呈现,javascript,node.js,mongodb,express,template-engine,Javascript,Node.js,Mongodb,Express,Template Engine,我想从mongodb中提取数据并将其传递给视图。一切似乎都正常,但我看到的不是全部10000张唱片,而是一张。我觉得我很快就要解决它了,但我被卡住了。。。我正在使用node mongodb native、express和dot.js来实现我的目标 这是我的app.js,查找app.get(),所有操作都在这里: /** * Mongo DB */ var mongodb = require('mongodb'), serverdb = new mongodb.Server('
/**
* 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>
指数
{{=it.data}
如果可以的话,请帮忙。谢谢。我对dot.js模板引擎一无所知。但是我猜您对
res.render('index.html',{data:data.\u id})的调用
会为光标中的每个元素重新呈现页面,最后呈现页面。我对dot.js模板引擎一无所知。但是我猜您对res.render('index.html',{data:data.\u id})的调用
会为光标中的每个元素重新呈现页面,并最终呈现页面的最后一次呈现。迭代时,可以将每个数据存储到数组或linkedlist中。迭代完数组后,可以res.render
并将数组或linkedlist传递到视图中 迭代时,可以将每个数据存储到数组或linkedlist中。迭代完数组后,可以res.render
并将数组或linkedlist传递到视图中 好吧,我终于找到了一个解决方案,首先我必须从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();
}
});
});
});
//--------------------------------------------------------------
my index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Index</title>
</head>
<body>
{{=it.returnedData}}
</body>
</html>
指数
{{=it.returnedData}
正如我所说,这不是理想的解决方案,但我认为现在我必须让模板引擎本身的高级功能发挥作用。好吧,我终于找到了一个解决方案,首先我必须从
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();
}
});
});
});
//--------------------------------------------------------------
my index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Index</title>
</head>
<body>
{{=it.returnedData}}
</body>
</html>
指数
{{=it.returnedData}
正如我所说,这不是理想的解决方案,但我认为现在我必须让模板引擎本身的高级功能发挥作用。是的,这似乎是会发生的事情,但这对我来说是很难克服的。当然,我在app.js和view中尝试了很多可能性。但是没有一个给了我正确的结果。不管怎样,谢谢。是的,这似乎发生了,但这对我来说是很难克服的。当然,我在app.js和view中尝试了很多可能性。但是没有一个给了我正确的结果。无论如何谢谢。@scott pascoe谢谢scott,我通常在拼写和语法方面更简洁,你所有的编辑都是精确的。谢谢。@scott pascoe谢谢scott,我通常在拼写和语法方面更简洁,你所有的编辑都很精确。谢谢