#javascript #html #express #ejs #web-development-server
Вопрос:
Изначально я составлял список дел без базы данных и столкнулся с проблемой. Всякий раз, когда я отмечал пункт, а затем добавлял другой пункт, моя галочка на предыдущем пункте исчезала.
Чтобы решить эту проблему, у меня был 2-d массив, в котором хранился элемент списка и значение bool, т. Е. Проверено ли значение или нет. Поэтому в запросе post (пользователь, желающий добавить новый элемент в форму), после добавления элемента в массив, я использовал селектор запросов, чтобы извлечь все флажки и проверить, были ли они отмечены галочками или нет. И если бы они были, я просто изменил их значение bool как истинное.
В HTML-коде я использовал EJS, чтобы добавить условия JS if-else. Используя эти условия, установите/снимите флажок в зависимости от значения bool.
Код Javascript работает нормально, когда я пытаюсь отладить его на консоли Chrome. Но он выдает мне 500 ОШИБОК, когда я запускаю его через сервер, как обычный код. Пожалуйста, помогите мне устранить ошибку. Я добавляю коды JS и HTML соответственно ниже.
Трассировка стека:
ReferenceError: document is not defined
at D:WorkCodeProjectsWebDevTo-Do-Listapp.js:48:21
at Layer.handle [as handle_request] (D:WorkCodeProjectsWebDevTo-Do-Listnode_modulesexpresslibrouterlayer.js:95:5)
at next (D:WorkCodeProjectsWebDevTo-Do-Listnode_modulesexpresslibrouterroute.js:137:13)
at Route.dispatch (D:WorkCodeProjectsWebDevTo-Do-Listnode_modulesexpresslibrouterroute.js:112:3)
at Layer.handle [as handle_request] (D:WorkCodeProjectsWebDevTo-Do-Listnode_modulesexpresslibrouterlayer.js:95:5)
at D:WorkCodeProjectsWebDevTo-Do-Listnode_modulesexpresslibrouterindex.js:281:22
at Function.process_params (D:WorkCodeProjectsWebDevTo-Do-Listnode_modulesexpresslibrouterindex.js:335:12)
at next (D:WorkCodeProjectsWebDevTo-Do-Listnode_modulesexpresslibrouterindex.js:275:10)
at D:WorkCodeProjectsWebDevTo-Do-Listnode_modulesbody-parserlibread.js:130:5
at invokeCallback (D:WorkCodeProjectsWebDevTo-Do-Listnode_modulesraw-bodyindex.js:224:16)
// GLOBAL
var items = new Array;
app.post("/", (req, res) => {
// request the data sent through post request and append it to the array
var temp = new Array(2);
temp[0] = req.body.listItem;
temp[1] = false;
items.push(temp);
// check if the user has already checked the box
const checks = document.querySelectorAll("ul input")
for (var i = 0; i < checks.length; i ) {
if (checks[i].checked) {
items[i][1] = true;
}
}
// now redirect to the index page (don't worry about passing the array since it's global)
res.redirect("/");
});
<ul>
<% for(var i =0; i < newItems.length; i ){ %>
<div class="item">
<% if(newItems[i][1]){ %>
<input type="checkbox" checked>
<% } else{ %>
<input type="checkbox">
<% } %>
<p>
<%= newItems[i][0] %>
</p>
</div>
<% } %>
</ul>
Комментарии:
1. Какова трассировка стека для ошибки 500?
2. Я добавил журнал ошибок, я надеюсь, что он называется трассировкой стека, так как я не уверен 🙂
3. То, что вы пытаетесь сделать, невозможно. Вы пытаетесь получить доступ к DOM (браузеру) в Node.js окружающая среда.
4. @DanZuzevich Я знаю, что могу сделать это в обычном файле сценария, поэтому я предположил, что мы могли бы сделать это и в среде NodeJS.
5. К сожалению, вы не можете.