如何在ejs模板中使用循环显示多个结果?

问题描述 投票:0回答:1

截图:(https://i.stack.imgur.com/w8z5M.png)

我的代码: (ejs文件代码)

<div class="container">
      <h1 class="text-center">Domain Age Checker</h1>``
      <form action="/domainagechecker" method="post">
        <div class="form-group">
          <label for="domain">Domain URL:</label>
          <textarea
            class="form-control"
            type="text"
            name="domain"
            id=""
            placeholder="write a domain"
          ></textarea>
        </div>
        <br />
        <div class="form-group">
          <button class="btn btn-block btn-primary">Get Details</button>
        </div>
      </form>
      <br />

      <%if (flag) { %>

      <table class="table table-striped">
        <thead>
          <tr>
            <th>Domain Name</th>
            <th>Running Server</th>
            <th>Creation Date</th>
            <th>Domain Age</th>
            <th>Last Renewal</th>
            <th>Expiry Date</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td><%=data.domainName%></td>
            <td><%=data.registrar%></td>
            <td><%=date%></td>
            <td><%=domainAge%></td>
            <td><%=data.updatedDate%></td>
            <td><%=data.registryExpiryDate%></td>
          </tr>
        </tbody>
      </table>
   <% } %>
</div>

***(节点 js api:)


app.set('view engine', 'ejs');

app.get("/", (req,res) => {
    res.render("domainagechecker", {
      title: "Domain Details",
      data: "",
      flag: false,
      date: "",
      domainAge: "",
    });
})

app.post("/domainagechecker", async (req, res) => {
  var domain = req.body.domain;
  console.log(domain);

  var list_Domains = domain.split(" ");

  for (let i = 0; i < list_Domains.length; i++) {
    console.log("sl.no " + i + " " + list_Domains[i]);

    if (isValidDomain(list_Domains[i])) {
      var result = await whoisinfo(list_Domains[i]);
      console.log(result);

      var date = moment(result.creationDate).format("YYYY-MM-DD");
      var curDate = moment(new Date()).format("YYYY-MM-DD");

      console.log("creation date: " + date);
      console.log(curDate);

      var a = moment(date);
      var b = moment(curDate);
      console.log(a);
      console.log(b);

      var years = b.diff(a, "years");
      a.add(years, "years");

      var months = b.diff(a, "months");
      a.add(months, "months");

      var days = b.diff(a, "days");

      var domainAge =
        years + " years " + months + " months and " + days + " days";

      res.render("domainagechecker", {
        title: "Domain Details",
        data: result,
        flag: true,
        date: date,
        domainAge: domainAge,
        domain1: domain,
      });
    } else {
      res.send("please enter domain name as 'example.com' (only domain name)");
    }
  }
});

我尝试过 for 循环,但它对我不起作用。请告诉我解决方案。

API 根据输入获取结果,但 ejs 模板仅显示第一个值。帮助我获取表中多个输入的结果

node.js ejs
1个回答
0
投票

您将一一渲染并获取一次结果,而不是将所有数据放入数组中,然后您将获得所有数据

app.get("/", (req, res) => {
    res.render("domainagechecker", {
        title: "Domain Details",
        results: [],
        flag: false,
    });
});

然后推送所有数据:

results.push({
  domainName: list_Domains[i],
  data: result,
  date: date,
  domainAge: domainAge,
});

你的最终 ejs 应该在结果数组中渲染完整的数据:

<table class="table table-striped">
  <thead>
    <tr>
      <th>Domain Name</th>
      <th>Running Server</th>
      <th>Creation Date</th>
      <th>Domain Age</th>
      <th>Last Renewal</th>
      <th>Expiry Date</th>
    </tr>
  </thead>
  <tbody>
    <% results.forEach(function(result) { %>
    <tr>
      <td><%= result.domainName %></td>
      <td><%= result.data.registrar %></td>
      <td><%= result.date %></td>
      <td><%= result.domainAge %></td>
      <td><%= result.data.updatedDate %></td>
      <td><%= result.data.registryExpiryDate %></td>
    </tr>
    <% }); %>
  </tbody>
</table>
© www.soinside.com 2019 - 2024. All rights reserved.