#javascript #node.js #mongodb #ejs
#javascript #node.js #mongodb #ejs
Вопрос:
Я создаю приложение, которое позволит пользователям нажимать на кнопку, и когда они вернутся на страницу, появится сообщение с надписью «Уже заинтересовано». Когда я отображаю страницу, она пропускает оператор if в цикле for и отображает оператор else. Что я делаю не так?
Ниже приведен мой код и текущий вывод.
<% for(var i=0; i < userInterests.length; i ) { %>
<% if ((username == userInterests[i].username) amp;amp; (postID == userInterests[i].post_id)){ %>
<p>Already interested</p>
<% break; %>
<% } else { %>
<form action="/jobs/interested/<%= post._id %>" method='POST'>
<button type="submit" class="btn btn-info">I'm interested</button>
</form>
<% break; %>
<% } %>
<% } %>
Комментарии:
1. Ему не нравится проблема с EJS. В противном случае он бы не компилировался. Попробуйте записать все значения в
if
инструкции и просмотреть их значения в цикле. Это даст вам четкое представление о том, почему вашеif
утверждение оценивается как ложное.2. Чтобы ваша логика была более надежной в js, рассмотрите возможность использования
===
вместо==
.3. Я уже зарегистрировал их значения, и они соответствуют записи в базе данных. Есть ли проблема с логикой моего кода?
Ответ №1:
Логическая проблема, вы тестируете username и postID только со значениями userInterests[0].username и serInterests[0].post_id поскольку у вас есть оператор break; в ваших 2 условиях, вот решение проблемы :
<% var userInterested = false %>
<% for(var i=0; i < userInterests.length; i ) { %>
<% if ((username == userInterests[i].username) amp;amp; (postID == userInterests[i].post_id)){ %>
<% userInterested = true; %>
<% break; %>
<% } %>
<% } %>
<% if (userInterested) { %>
<p>Already interested</p>
<% } else { %>
<form action="/jobs/interested/<%= post._id %>" method='POST'>
<button type="submit" class="btn btn-info">I'm interested</button>
</form>
<% } %>