Вопрос или проблема
Я разрабатываю систему управления студентами с использованием Node.js, MySQL и EJS для отображения представлений. Я хочу отобразить список студентов с их статусом в таблице, но столбец статуса не показывает никаких значений, хотя данные существуют в базе данных.
Запрос MySQL:
SELECT s.stuNIC as NIC, s.stuUserName as username, u.intendedMajor, u.status
FROM student s
JOIN university_registration u ON s.stuNIC = u.NIC;
Запрос работает корректно, когда я запускаю его напрямую в MySQL, и возвращает значение status
, как и ожидалось.
Шаблон EJS (uni-view-student.ejs
):
<% data.forEach(function(student) { %>
<tr onclick="window.location.href='https://stackoverflow.com/uni-notification/<%= student.NIC %>'">
<td><%= student.NIC %></td>
<td><%= student.username %></td>
<td><%= student.intendedMajor %></td>
<td><%= student.status %></td> <!-- Это не показывает никаких значений -->
</tr>
<% }); %>
Код Node.js (server.js
):
app.get('/uni-view-student', (req, res) => {
const query = `
SELECT s.stuNIC as NIC, s.stuUserName as username, u.intendedMajor, u.status
FROM student s
JOIN university_registration u ON s.stuNIC = u.NIC
`;
connection.query(query, (err, results) => {
if (err) {
console.error('Ошибка при запросе к базе данных:', err);
return res.status(500).send('Ошибка запроса к базе данных');
}
res.render('uni-view-student', { data: results });
});
});
Несмотря на то, что student.status
является частью запроса и имеет значения в базе данных, столбец статуса отображается пустым на странице.
Что может быть причиной этой проблемы и как я могу ее исправить, чтобы значение status
отображалось правильно в шаблоне EJS?
Ответ или решение
Конечно! Давайте разберёмся с проблемой, которую вы описали, а именно с тем, что колонка статуса не отображается в вашем EJS-шаблоне, хотя данные правильно извлекаются из базы данных.
Возможные причины и решения
-
Проверка данных в
results
:
Первое, что необходимо сделать, это убедиться, чтоstatus
действительно присутствует в ваших результатах запроса. Вы можете это проверить, добавив временный лог в код, который выводит содержимоеresults
в консоль:connection.query(query, (err, results) => { if (err) { console.error('Error querying the database:', err); return res.status(500).send('Database query error'); } console.log(results); // Вывод данных в консоль для проверки res.render('uni-view-student', { data: results }); });
Проверьте, улетает ли туда значение
status
. Возможно, в результате добавляется пустое значение или оно отсутствует. -
Проверка на наличие опечаток:
Убедитесь, что вы правильно обращаетесь к полюstatus
в EJS-шаблоне. Поскольку вы используете aliasstatus
в SQL запросе, вы должны использовать точно такое же название в EJS:<td><%= student.status %></td>
-
Проблемы с шаблоном:
Иногда ошибки в EJS могут быть вызваны неверным синтаксисом. Убедитесь, что в строчке сonclick
вы правильно экранируете кавычки. Вот исправленная форма:<tr onclick='window.location.href="https://stackoverflow.com/uni-notification/<%= student.NIC %>"'>
-
Проверка структуры базы данных:
Убедитесь, что полеstatus
существует и правильно настроено в таблицеuniversity_registration
. Возможно, данные в этом поле не были заполнены для определённых студентов. -
Проверка наличия значений NULL:
Иногда поле может содержать значениеNULL
, из-за чего в шаблоне оно не будет отображаться. Вы можете изменить запрос, чтобы использоватьIFNULL
(или аналогичный) для обработки пустых значений:SELECT s.stuNIC as NIC, s.stuUserName as username, u.intendedMajor, IFNULL(u.status, 'Не указано') as status FROM student s JOIN university_registration u ON s.stuNIC = u.NIC;
- Стилизация и отображение:
Убедитесь, что в HTML/CSS нет ничего, что могло бы помешать отображению содержимого ячейки. Например, если цвет текста совпадает с цветом фона, это также может привести к "невидимости" текста.
Заключение
Если, следуя перечисленным пунктам, проблема будет актуальна, сделайте шаг назад и внимательно просмотрите логи ошибок в консоли, как сервера, так и браузера. Кроме того, стоит протестировать подключение к базе данных и повторно выполнить запрос.
С учётом вышесказанного, вы должны быть в состоянии найти и устранить проблему с отображением колонки status
в вашем EJS-шаблоне. Если всё вышеперечисленное не решает проблему, пожалуйста, предоставьте дополнительную информацию, чтобы мы могли помочь вам более детально.