将东西传递给Node Express中的视图

时间:2018-03-13 16:02:03

标签: node.js express ejs

我现在已经做了很多次,但突然之间我无法让它发挥作用。

这是我的路由器

router.get('/', function(req, res, next) {
  Account.findOne(
    {
      _id: req.user._id,
    },
    function(err, acc) {
      if (err) {
        console.log(err);
      }
      console.log(acc.websites);
      res.render('reports/index', {
        title: 'Reports!',
        websites: acc.websites,
        user: req.user,
      });
    }
  );

  res.render('reports/index', {
    title: 'Report',
    user: req.user,
  });
});

res.render打印数组之前的控制台日志。 ["georgiancollege.ca"]

我的观点:

<% include ./../partials/header.ejs %>
  <h1 class="text-center">This is your report page</h1>
  <form method="post" action="/generate-report">
    <% for(let i=0; i<websites.length; i++){ let website = websites[i] %>
      <fieldset>
        <label for="website" class="col-sm-2">Website <%=i+1%></label>
        <input name="website" id="website" type="text" />
      </fieldset>
      <% } %>
        <button class="btn btn-primary col-sm-offset-2">Login</button>
  </form>
  <% include ./../partials/footer.ejs %>

现在。当我尝试在浏览器中获取此视图时,错误只是堆积起来。这是报告的一部分。

ReferenceError: /home/iron/Documents/Projects/digitLead/views/reports/index.ejs:4
    2|       <h1 class="text-center">This is your report page</h1>
    3|       <form method="post" action="/generate-report">
>> 4|         <% for(let i=0; i<websites.length; i++){ let website = websites[i] %>
    5|           <fieldset>
    6|             <label for="website" class="col-sm-2">Website <%=i+1%></label>
    7|             <input name="website" id="website" type="text" />

websites is not defined
    at eval (eval at compile (/home/iron/Documents/Projects/digitLead/node_modules/ejs/lib/ejs.js:549:12), <anonymous>:56:23)
    at returnedFn (/home/iron/Documents/Projects/digitLead/node_modules/ejs/lib/ejs.js:580:17)
    at tryHandleCache (/home/iron/Documents/Projects/digitLead/node_modules/ejs/lib/ejs.js:223:34)

下一个错误

GET /reports 500 52.225 ms - 2919
["georgiancollege.ca"]
events.js:183
      throw er; // Unhandled 'error' event
      ^
TypeError: req.next is not a function
    at done (/home/iron/Documents/Projects/digitLead/node_modules/express/lib/response.js:966:25)
    at tryRender (/home/iron/Documents/Projects/digitLead/node_modules/express/lib/application.js:642:5)

我不知道我做错了什么,但它太刺激了。

1 个答案:

答案 0 :(得分:1)

您只能拨打res.render()一次。您的处理程序有两次调用res.render(),因此只有第一个运行计数。在这种情况下,第一个要运行的是不在异步Account.findOne()句柄中,并且它不包含websites元素,因此您的模板正在抱怨。