nodejs新手。一直在努力解决这个基本问题。我在mongo db中有一些数据。我正在使用express与ejs视图引擎。我可以看到console.log输出的mongo数据。我知道我可以使用以下标签在ejs模板中插入我的数据:<%= variable%>,但我似乎无法弄清楚如何在res.render代码中呈现它。
以下是从mongo中提取数据的代码:
MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Unable to connect to the mongoDB server. Error:', err);
} else {
console.log('Connection established to', url);
// Get the documents collection
var collection = db.collection('car');
// Query the collection
collection.find(),(function (err, result) {
if (err) {
console.log(err);
} else if (result.length) {
console.log('Found:', result);
} else {
console.log('No document(s) found with defined "find" criteria!');
}
//Close connection
db.close();
});
}
});
这是渲染部分:
// index page
app.get('/', function(req, res) {
res.render('pages/index', {collection: result} );
});
这是ejs模板:
<h2>Cars:</h2>
<h3><%= result %>
这是我在浏览器中看到的错误:
ReferenceError:未定义结果
这非常令人沮丧,因为这应该是一个简单的直接...我试图这样做而不使用猫鼬。
非常感谢任何帮助。
感谢。
答案 0 :(得分:0)
尝试
<%= collection %>
你必须使用KEY代替来自json对象的VALUE。
希望您在快速模块中正确设置了视图目录和视图引擎。
答案 1 :(得分:0)
您的代码中存在两个问题:
1)您需要有一个可以传递给视图的结果对象:
function getResult(callback) {
MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Unable to connect to the mongoDB server. Error:', err);
} else {
console.log('Connection established to', url);
// Get the documents collection
var collection = db.collection('car');
// Query the collection
collection.find(),(function (err, result) {
if (err) {
console.log(err);
} else if (result.length) {
console.log('Found:', result);
} else {
console.log('No document(s) found with defined "find" criteria!');
}
//Close connection
db.close();
callback(err, result);
});
}
});
}
// index page
app.get('/', function(req, res) {
var result = getResult(function(err, result){
//handle err, then you can render your view
res.render('pages/index', {collection: result} );
});
});
2)在你的视图中,你将有一个名为collection(不是结果)的对象:
<h2>Cars:</h2>
<h3><%= collection %>