Как использовать несколько res.render () в одном Express app.get () - PullRequest
0 голосов
/ 17 июня 2020

Я хочу использовать res.render несколько раз в одном и том же app.get (). Каждый 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>

1 Ответ

0 голосов
/ 17 июня 2020

Вы не должны вызывать 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");
};
...