将mongo数据渲染到ejs模板

时间:2015-11-27 04:28:29

标签: node.js mongodb ejs

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:未定义结果

这非常令人沮丧,因为这应该是一个简单的直接...我试图这样做而不使用猫鼬。

非常感谢任何帮助。

感谢。

2 个答案:

答案 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 %>