【问题标题】:Pull mongo data to ejs template将 mongo 数据拉取到 ejs 模板
【发布时间】:2015-12-05 02:24:35
【问题描述】:

我在 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 %>

这应该非常简单明了,但我只是不明白如何将“mk”变量(我可以将 console.log 传递到屏幕)以由 ejs 视图呈现?

【问题讨论】:

  • 为了澄清,你的渲染代码中result 的输出是什么。您能否在渲染代码中 console.log result 对象并将其添加到您的问题中?
  • 查询方法[find()]应该在路由方法[app.get()]中。然后,您可以将查询结果分配为 ​​EJS 变量,就像 Michelem 的答案一样。此外,我认为您使用 node-mongodb-native 模块来访问 MongoDB。如果你想以特定的形式存储数据,比如数字或日期,你应该使用像 Mongoose 这样的 ORM。否则,您的数据将存储为字符串。通常,在处理诸如“出生日期”之类的日期或诸如“总金额”之类的数字等时,这是一个问题。因此,每次要在计算中使用这些值时,都需要转换这些值。祝你好运..
  • $ node app-mongo.js 8080 是与mongodb建立的端口连接://localhost:27017/test 发现: [ { _id: 5657c6acf4175001ccfd0ea8, make: 'VW' } ] mk = [ { _id:5657c6acf4175001ccfd0ea8,品牌:'大众'}]

标签: node.js mongodb express ejs


【解决方案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();
    });
});

【讨论】:

  • 感谢 Michelem。我已根据您上面的建议修改了代码。现在,当我将“mk”变量传递给 ejs 时,我在 html 页面上得到以下信息: Cars: My favorite make is [object Object]
  • 变量名是什么?结果,res,make还是mk? %>
  • 你必须得到你需要的对象的属性,我不知道你需要打印什么,可能类似于&lt;%= make.theproperty %&gt;。该对象也可以是结果数组,因此您需要循环它。如果您需要,请批准此答案并写下另一个问题。
【解决方案2】:

很简单,你正在输出一个 JSON 对象数组

这是一种可视化方式:

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

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

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

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

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

【讨论】:

    【解决方案3】:

    它应该很简单,但是你定义mk 就像这样:mk = result 所以因为你想将一个变量传递给你需要的ejs 文件

    "var mk = result"
    

    祝你有美好的一天,本。

    【讨论】:

      猜你喜欢
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 2018-08-18
      • 2016-03-06
      • 2020-06-24
      • 2019-08-21
      相关资源
      最近更新 更多