Проблема рендеринга EJS: Значение столбца статуса не отображается по запросу MySQL

Вопрос или проблема

Я разрабатываю систему управления студентами с использованием 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-шаблоне, хотя данные правильно извлекаются из базы данных.

Возможные причины и решения

  1. Проверка данных в 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. Возможно, в результате добавляется пустое значение или оно отсутствует.

  2. Проверка на наличие опечаток:
    Убедитесь, что вы правильно обращаетесь к полю status в EJS-шаблоне. Поскольку вы используете alias status в SQL запросе, вы должны использовать точно такое же название в EJS:

    <td><%= student.status %></td> 
  3. Проблемы с шаблоном:
    Иногда ошибки в EJS могут быть вызваны неверным синтаксисом. Убедитесь, что в строчке с onclick вы правильно экранируете кавычки. Вот исправленная форма:

    <tr onclick='window.location.href="https://stackoverflow.com/uni-notification/<%= student.NIC %>"'>
  4. Проверка структуры базы данных:
    Убедитесь, что поле status существует и правильно настроено в таблице university_registration. Возможно, данные в этом поле не были заполнены для определённых студентов.

  5. Проверка наличия значений 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;
  6. Стилизация и отображение:
    Убедитесь, что в HTML/CSS нет ничего, что могло бы помешать отображению содержимого ячейки. Например, если цвет текста совпадает с цветом фона, это также может привести к "невидимости" текста.

Заключение

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

С учётом вышесказанного, вы должны быть в состоянии найти и устранить проблему с отображением колонки status в вашем EJS-шаблоне. Если всё вышеперечисленное не решает проблему, пожалуйста, предоставьте дополнительную информацию, чтобы мы могли помочь вам более детально.

Оцените материал
Добавить комментарий

Капча загружается...