将mongo数据拉到ejs模板

时间:2015-12-05 02:24:35

标签: node.js mongodb express ejs

我在mongo中有以下基本文档:

connecting to: test
> db.car.find();
{ "_id" : ObjectId("5657c6acf4175001ccfd0ea8"), "make" : "VW" }

我正在使用express,mongodb本地客户端(不是mongoose)和ejs。

 collection.find().toArray(function (err, result) {
      if (err) {
        console.log(err);
      } else if (result.length) {
       console.log('Found:', result);
        mk = result;
        console.log('mk = ', mk);
      } 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', { make: result });
    });

我想将数据make:VW传递到我的index.ejs文件中:

 <h2>Cars:</h2>
        <h3>My favorite make is <%= make %>

这应该是非常简单明了的,但我不知道如何通过&#34; mk&#34; ejs视图可以呈现变量(我可以将console.log添加到屏幕上)吗?

3 个答案:

答案 0 :(得分:1)

您应该在路由中使用find方法(或使用回调)来获取结果并呈现它:

app.get('/', function(req, res) {
    collection.find().toArray(function(err, result) {
        if(err) {
            console.log(err);
            res.status('400').send({error: err});
        } else if(result.length) {
            console.log('Found:', result);
            mk = result;
            console.log('mk = ', mk);
            res.render('pages/index', {make: mk});
        } else {
            console.log('No document(s) found with defined "find" criteria!');
            res.status('400').send({error: 'No document(s) found'});
        }
        //Close connection
        db.close();
    });
});

答案 1 :(得分:0)

很简单,您正在输出JSON对象数组

以下是一种可视化方法:

[{a:b},{a:b},{a:b},{a:b}];

如果你想要第一个结果,那就是数组[0] .a

所以你只需要这样称呼它:

<%= make[0].(your database key here) =>
//example
<%= make[0].name =>

完成这项工作的一种更明智的方法是遍历数组并仅在服务器端输出您想要的结果。如果您将所有数据发送到客户端,则可能存在安全问题,具体取决于您发送的内容。

答案 2 :(得分:0)

它应该很简单,但您定义mk就像这样:mk = result因此,您想要将变量传递给ejs文件,您需要

"var mk = result"

祝你有个美好的一天,本。