【问题标题】:Noje.js EJS Database callNode.js EJS 数据库调用
【发布时间】:2022-02-03 02:21:39
【问题描述】:

来自 JAVA 背景,我发现 EJS 很有趣。但是,我似乎无法弄清楚如何在循环时从不同的函数中获取对象。在下面的示例中,我试图在 ReadingLog 中调用一个名为 chapters 的异步函数,该函数查询数据库并返回每本书的章节:

  <%
entries.forEach(function(i){

            let chapters = await ReadingLog.chapters(i.book_uid);
                            
            total_mins=parseFloat(total_mins)+parseFloat(i.minutes);
                            console.log('Date:'+i.date.toDate().toISOString());
                            let tzdate = datetimeutil.converttz(i.date.toDate(),"America/Montreal");
                            let mdate =  datetimeutil.convert_to_str(i.date.toDate());

        %>
        <tr>
            <td><%= mdate %></td>
            <td><%= i.book_title %></td>
                            <td>
                                <% if(i.language!=null && i.language == "fr"){ %>Fran&c&cedil;ais<% } %>
                                <% if(i.language!=null && i.language == "en"){ %>English<% } %>
                                <% if(i.language!=null && i.language == "es"){ %>Español<% } %>
                            </td>
%>

无论如何要在 EJS 中实现它?

谢谢

【问题讨论】:

  • 请注意,即使您来自 Java,那不是您如何命名变量和方法。在 JS 中,就像在 Java 中一样,变量和方法使用带有小写首字母的 camelCase。没有snake_case_naming,坚持你工作的语言的编码约定=)

标签: node.js express ejs


【解决方案1】:

永远不要在 EJS 中“让事情发生”,这不是它的工作。您在 Node.js 代码中准备所有数据,然后将其作为模板上下文传递给 EJS,以便在其中进行模板化。

所以在这种情况下:在 Node 端获取 chapters 数据,然后然后呈现响应:

app.get(`whatever`, ..., async (req, res) => {
  const entries = wherever.this.comesFrom();

  // first, prep all your data for templating
  const data = await Promise.all(
    entries.map((entry, i) => {
      return new Promise(resolve => {
      const chapter = await ReadingLog.chapters(id);
      const totalMins = ...;
      ...
      resolve({ i, chapter, totalMins, ... });
    });
  });

  // then just pass that data to your templating engine of choice.
  res.render(`yourtemplate.html`, { entries: data });

});

然后 EJS 只需要循环遍历 entries 并盲目地将值写入您的模板,最多使用一些 for 循环来生成正确包装的数据。

【讨论】:

    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2019-10-09
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多