#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, но это похоже на единственное различие между версией, которая работает, и той, которая не работает.