Как использовать данные, переданные в ejs дважды

#node.js #ejs

#node.js #ejs

Вопрос:

Я делаю проект с node js, и мне нужно отобразить некоторые данные, которые я извлек из своей базы данных, в файле ejs. Во второй раз, когда я пытаюсь отобразить данные, они пустые (список данных, с которым я работаю, имеет пустые поля). Как я могу это сделать?

Часть моего файла ejs, в которой я использую данные более одного раза:

 <body>
<%- include('../partials/navbarHorizontal.ejs') %>

<div class="container justify-content-center my-4">
  <div class="row shadow-sm my-4">
    <div class="col m-4">
      <form action="/dekanat" method="POST">
        <div>Përditësoni dekanatin</div>

        <div class="row">
          <div class="row">
            <label class="small gray" for="dekan">Dekani</label>
            <div>
              <input list="dekan_list" name="dekan" id="dekan" class="inputText"/>
              <datalist id="dekan_list">

              //The first time i use the data

                <%pedagoge.forEach(element => {%>
                <option
                  value="<%=element.emer_ped%> <%=element.mbiemer_ped%>"
                  data-id="<%=element.id_ped%>"
                ></option>
                <%});%>
              </datalist>
            </div>
          </div>
          <div class="col">
            <label class="small gray" for="zvDek1">Zv. Dekani</label>
            <div>
              <input list="zvDek1_list" name="zvDek1" id="zvDek1" class="inputText" />
              <datalist id="zvDek1_list">

              //The second time i use the data

                <% pedagoge.forEach(element =>{%>
                <option
                  value="<%element.emer_ped%> <%element.mbiemer_ped%>"
                  data-id="<%element.id_ped%>"
                ></option>
                <%});%>
              </datalist>
            </div>
          </div>

          <div class="col">
            <label class="small gray" for="zvDek2">Zv. Dekani</label>
            <div>
              <input list="zvDek2_list" name="zvDek2" id="zvDek2" class="inputText"/>

              <datalist id="zvDek2_list">

              //The third time i use the data

                <% pedagoge.forEach(element =>{%>
                <option
                  value="<%element.emer_ped%> <%element.mbiemer_ped%>"
                  data-id="<%element.id_ped%>"
                ></option>
                <%});%>
              </datalist>
            </div>
          </div>
        </div>

        <div class="row mt-3 text-center">
          <div class="col-4">
            <input type="submit" value="Ruaj" class="rounded-pill buton" id="saveDek" />
          </div>

          <div class="col-4">
            <input type="reset" value="Fshi" class="rounded-pill buton" id="fshi"/>
          </div>
        </div>
      </form>
    </div>
  </div>
</div>
 

Файл, в котором я его отображаю,:

 module.exports = {
dashboard: (req, res) => {
    alumniModel.display((resultAlumni) => {
      certificateModel.display((resultCertificate) => {
        docentModel.all((resultAllDocents) => {
          docentModel.notInDepartment((resultNotDep) => {
            departamentModel.all((resultDep) => {
              res.render("dashboard/dashboard.ejs", {
                eksperienca: resultAlumni,
                vertetime: resultCertificate,
                pedagoge: resultAllDocents,
                jashtem: resultNotDep,
                departament: resultDep,
              });
            });
          });
        });
      });
    });
  },
 

Я знаю, что это очень удобно, но я новичок в js узла, и я не знал, как это сделать по-другому.

Сгенерированный HTML-код:

 <div class="row shadow-sm my-4">
        <div class="col m-4">
          <form action="/dekanat" method="POST">
            <div>Përditësoni dekanatin</div>

            <div class="row">
              <div class="row">
                <label class="small gray" for="dekan">Dekani</label>
                <div>
                  <input list="dekan_list" name="dekan" id="dekan" class="inputText"/>

                  //The first time 
                  <datalist id="dekan_list">
                    <option value="John Doe" data-id="1" ></option>
                    <option value="John Doe2" data-id="2" ></option>
                  </datalist>

                </div>
              </div>
              <div class="col">
                <label class="small gray" for="zvDek1">Zv. Dekani</label>
                <div>
                  <input list="zvDek1_list" name="zvDek1" id="zvDek1" class="inputText" />

                  //The second time 
                  <datalist id="zvDek1_list"> 
                    <option value=" " data-id="" ></option> 
                    <option value=" " data-id="" ></option>
                  </datalist>
                </div>
              </div>

              <div class="col">
                <label class="small gray" for="zvDek2">Zv. Dekani</label>
                <div>
                  <input list="zvDek2_list" name="zvDek2" id="zvDek2" class="inputText" />

                  //The third time 
                  <datalist id="zvDek2_list"> 
                    <option value=" " data-id="" ></option> 
                    <option value=" " data-id="" ></option> 
                  </datalist>
                </div>
              </div>
            </div>
 

Комментарии:

1. Пожалуйста, покажите весь шаблон и укажите, какая часть пуста при преобразовании в HTML. Сами шаблоны не удаляют данные, которые вы передаете. Кроме того, пожалуйста, покажите точные данные, которые передаются в шаблон при его рендеринге.

2. Значение моих параметров пусто во второй раз, когда я хочу отобразить их в списке данных. Когда я нажимаю ввод, он отображает то же количество параметров, что и в первый раз, но без значения. Мой код одинаков в обоих случаях.

3. Что значит «второй раз»? Есть ли два вхождения этих данных в одном шаблоне? Или вы создаете шаблон более одного раза с нуля? В своем первом комментарии я попросил вас добавить дополнительную информацию к вашему вопросу — эта информация поможет нам ответить.

4. Я хочу использовать данные, которые я извлек из своей базы данных более одного раза в ejs-файле, который я визуализирую. В частности, в моем случае я делаю 4 запроса, и один из них — это данные, которые показаны в моем вопросе. Я хочу снова использовать эти данные в том же файле ejs, чтобы снова отобразить список людей. Я обновлю свой вопрос, чтобы включить данные, переданные в мой файл.

5. Ссылка на данные в вашем шаблоне НЕ является разрушительной, поэтому данные все равно будут присутствовать для второго использования в шаблоне, если вы где-то не сделали что-то не так. Пожалуйста, прочтите мой первый комментарий. Я попросил вас показать больше информации — весь шаблон и код, который подготавливает данные и вызовы res.render() . Если вы не собираетесь этого делать, я просто пойду дальше и помогу другим, поскольку мне больше нечего делать здесь с информацией, которая у вас есть в вопросе сейчас.

Ответ №1:

Ваш первый показывает этот синтаксис:

 value="<%=element.emer_ped%> <%=element.mbiemer_ped%>"
 

Ваши вторые и третьи используют немного другой синтаксис:

 value="<%element.emer_ped%> <%element.mbiemer_ped%>"
         ^                    ^
 

Обратите внимание на отсутствие = там, где ^ указано. Я лично не знаю синтаксис ejs, но это похоже на единственное различие между версией, которая работает, и той, которая не работает.