【问题标题】:How to use multiple res.render() in one Express app.get()如何在一个 Express app.get() 中使用多个 res.render()
【发布时间】:2020-10-07 06:44:43
【问题描述】:

我想在同一个 app.get() 中多次使用 res.render。每个 res.render() 都应该从单独的数据库表中呈现详细信息。

我曾尝试将 Express 中间件与 next() 一起使用,但我无法开始工作。

谁能解释我如何渲染多个元素?谢谢!

app.get("/add-item", getCategories, getPayees);

function getCategories(req, res) {
   // Code here
   Category.find({}, function (err, categories) {
     res.render("add-item", {
       savedCategories: categories
    });
  });
};

function getPayees(req, res) {
   // Code here
   Payee.find({}, function (err, payees) {
     res.render("add-item", {
       savedPayees: payees
    });
  });
};
<form action="/add-item" method="post">

    <div class="form-group">

      <label for="itemCategory">Category</label>
      <select class="form-control form-control-sm" id="itemCategory" name="itemCategory">

        <% savedCategories.forEach(function(category) { %>
          <option><%= category.name %></option>
        <% }); %>

      </select>

    </div>

    <div class="form-group">

      <label for="itemPayee">Payee</label>
      <select class="form-control form-control-sm" id="itemPayee" name="itemPayee">

        <% savedPayees.forEach(function(payee) { %>
          <option><%= payee.name %></option>
        <% }); %>

      </select>

    </div>

    </div>

    <button class="btn btn-primary btn-sm" type="submit" name="submit">Add</button>

  </form>

【问题讨论】:

    标签: node.js express ejs


    【解决方案1】:

    您不应该多次调用 res.render。相反,将您的数据添加到 res.locals 然后呈现页面:

    app.get("/add-item", getCategories, getPayees, renderForm);
    
    function getCategories(req, res, next) {
       // Code here
       Category.find({}, function (err, categories) {
         if (err) next(err);
         res.locals.savedCategories = categories;
         next();
       });
    };
    
    function getPayees(req, res, next) {
       // Code here
       Payee.find({}, function (err, payees) {
         if (err) next(err);
         res.locals.savedPayees = payees;
         next();
       });
    };
    
    function renderForm(req, res) {
        res.render("add-item");
    };
    

    【讨论】:

    • 非常感谢!正是我需要的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2017-09-21
    • 2014-05-08
    • 1970-01-01
    相关资源
    最近更新 更多