Как создать систему управления общежитием с помощью Node.js?

Опубликовано: 4 Января, 2023

В этой статье мы собираемся создать систему управления общежитием. Система управления общежитием используется для управления записью студентов колледжа, которому колледж предоставляет общежитие, где колледж может просматривать все данные о студентах, включая их имена, регистрационный номер, дату рождения, город, номер телефона, телефон отца. номер, номер комнаты и название общежития. Колледж может добавлять новых студентов, удалять записи о существующих студентах и изменять количество студентов в комнатах.

Функции: Колледж может выполнять следующие действия с помощью этой системы управления общежитием:

  • Отображение записей учащегося
  • Добавить новых студентов
  • Удалить записи учащегося
  • Получить конкретную информацию о студентах по их номеру
  • Обновить номер комнаты студента

Подход: мы собираемся использовать Body Parser, с помощью которого мы можем фиксировать вводимые пользователем значения из формы, такие как имя студента, номер списка, дата рождения, город, номер телефона, номер телефона отца, номер комнаты, а также название общежития и магазин. их в коллекцию. Затем мы отправим данные студента на веб-страницу с помощью EJS. EJS — это промежуточное ПО, упрощающее отправку данных из файла вашего сервера (app.js или server.js) на веб-страницу.

Мы также собираемся создать маршрут удаления для удаления записей студентов, информационный маршрут для получения информации о студенте по его номеру списка и маршрут обновления для обновления номера комнаты студента.

Реализация: Ниже приведена пошаговая реализация описанного выше подхода.

Шаг 1: Настройка проекта

Инициализирует NPM: создайте и найдите папку проекта в терминале и введите команду

npm init -y

Он инициализирует наше приложение узла и создает файл package.json.

Установите зависимости: найдите корневой каталог проекта в терминале и введите команду

npm install express ejs body-parser

Чтобы установить Express, EJS и Body Parser в качестве зависимостей внутри вашего проекта

Создайте файл сервера: создайте файл «app.js», внутри этого файла укажите модуль Express и создайте постоянное «приложение» для создания экземпляра модуля Express, затем установите EJS в качестве механизма просмотра по умолчанию.

const express = require("express");
const app = express();
app.set("view engine", "ejs");

Переупорядочите свои каталоги: необходимо использовать «.ejs» в качестве расширения для файла HTML вместо «.html» для использования EJS внутри него. Затем вам нужно переместить каждый файл «.ejs» в каталоге представлений внутри вашего корневого каталога. EJS по умолчанию ищет файлы '.ejs' внутри папки представлений.

Используйте переменную EJS: Внутри вашего обновленного файла .ejs вы должны использовать переменные EJS для получения значений из файла вашего сервера. Вы можете объявлять переменные в EJS, например

<%= variableName %>

HTML




<!DOCTYPE html>
<html>
   
<head>
    <title>Page Title</title>
</head>
   
<body>
    <%= variableName %>
</body>
  
</html>

Отправка данных в переменную: внутри файла вашего сервера ( app.js или index.js ) вы можете отправить файл EJS вместе с некоторыми данными, используя метод рендеринга.

app.get("/", (req, res) => {
    res.render("home", { variableName: "Hello Geeks!" })
})

Javascript




const express = require("express")
const app = express()
app.set("view engine", "ejs")
  
app.get("/", (req, res) => {
     res.render("home", { variableName: "Hello Geeks!" })
})
  
app.listen(3000, (req, res) => {
     console.log("App is running on port 3000")
})

Извлечение данных из формы в app.js: чтобы получить входные значения формы, мы должны использовать пакет узлов с именем body-parser.

Установить парсер тела:

npm install body-parser

Требуется модуль body-parser:

const bodyParser = require("body-parser")

А потом:

app.use( bodyParser.json() );      
app.use(bodyParser.urlencoded({    
      extended: true
}));

Затем мы можем обрабатывать данные формы, используя объект запроса.

Шаг 2: Получить записи учеников: у нас есть множество учеников с разными свойствами. Давайте отправим массив на нашу веб-страницу. На предыдущем шаге мы просто отправили значение переменной, теперь мы отправляем полный массив.

Javascript




const express = require("express")
const bodyParser = require("body-parser")
const students = [{
    name: "Aditya Gupta",
    rollNo: 413020,
    dataOFBirth: "29/09/2000",
    city: "Mirzapur",
    number: 6388339966,
    fatherNumber: 6388339977,
    roomNo: 23,
    hostelName: "BH-2"
}]
  
const app = express()
  
app.set("view engine", "ejs")
  
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}))
  
app.get("/", function (req, res) {
    res.render("home", {
        data: students
    })
})
  
app.listen(3000, (req, res) => {
    console.log("App is running on port 3000")
})

Поскольку у нас так много элементов внутри нашего массива, и мы должны распечатать каждый из них, поэтому мы должны использовать цикл For Each Loop, чтобы перебрать каждый отдельный элемент в нашей коллекции и отобразить детали.

HTML




<!DOCTYPE html>
<html>
  
<head>
    <title>LMS</title>
  
    <style>
        table {
            font-family: arial, sans-serif;
            border-collapse: collapse;
            width: 100%;
        }
  
        td,
        th {
            border: 1px solid #dddddd;
            text-align: left;
            padding: 8px;
        }
  
        tr:nth-child(even) {
            background-color: #dddddd;
        }
    </style>
</head>
  
<body>
    <h1>All Books</h1>
    <table>
        <tr>
            <th>Name</th>
            <th>Roll No.</th>
            <th>Room No.</th>
            <th>Hostel Name</th>
        </tr>
        <% data.forEach(element=> { %>
            <tr>
                <td>
                    <%= element.name %>
                </td>
                <td>
                    <%= element.rollNo %>
                </td>
                <td>
                    <%= element.roomNo %>
                </td>
                <td>
                    <%= element.hostelName %>
                </td>
            </tr>
            <% }) %>
    </table>
</body>
  
</html>

Шаг 3: Добавьте учащихся в список. Для этого нам нужно создать форму и обработать данные формы в нашем файле app.js с помощью Body Parser.

<form action="/" method="post">
    <input type="text" placeholder="Name" name="name">
    <input type="text" placeholder="Roll No." name="rollNo">
    <input type="text" placeholder="DOB" name="dateOfBirth">
    <input type="text" placeholder="City" name="city">
    <input type="text" placeholder="Number" name="number">
    <input type="text" placeholder="Father"s Number" name="fatherNumber">
    <input type="text" placeholder="Room No." name="roomNo">
    <input type="text" placeholder="Hostel Name" name="hostelName">
    <button type="submit">Add</button>
</form>

Обработка данных формы внутри 'app.js': мы должны получить значения из формы, используя req.body.valueName, а затем упорядочить их как объект и поместить в массив нашего ученика.

app.post("/", (req, res) => {
   const name = req.body.name
   const rollNo = req.body.rollNo
   const dateOfBirth = req.body.dateOfBirth
   const city = req.body.city
   const number = req.body.number
   const fatherNumber = req.body.fatherNumber
   const roomNo = req.body.roomNo
   const hostelName = req.body.hostelName
   
   students.push({
       name: name,
       rollNo: rollNo,
       dateOfBirth: dateOfBirth,
       city: city,
       number: number,
       fatherNumber: fatherNumber,
       roomNo: roomNo,
       hostelName: hostelName
   })
   
   res.render("home", {
       data: students
   })
})

Шаг 4: Дополнительная информация: обновление веб-страницы с опцией «дополнительно» : нам нужно создать форму, которая отправляет номер студенческого списка, данные которого мы хотим получить из файла сервера «app.js».

<form action="/information" method="post">
    <input type="number" style="display: none;" 
        name="rollNo" value="<%= element.rollNo %>">
    <button type="submit">More Info.</button>
</form>

Для получения информации о студентах мы должны создать информационный маршрут, по которому мы собираемся получить номер списка запрошенного студента и найти элемент с таким же номером списка, а также отправить все данные об этом студенте на веб-страницу в формате JSON.

app.post("/information", (req, res) => {
    var requestedRollNo = req.body.rollNo;
   
    students.forEach(student => {
        if (student.rollNo == requestedRollNo) {
            res.json(student)
        }
    })
})

Шаг 5: Обновление номера комнаты: обновление веб-страницы с возможностью «обновления» : мы должны создать форму, которая отправляет номер списка учащегося, номер комнаты, который мы хотим обновить, и новый номер комнаты в файл сервера «app.js». .

<form action="/update" method="post">
    <input type="number" style="display: none;" 
        name="rollNo" value="<%= element.rollNo %>">   
    <input type="number" name="newroomno">   
    <button type="submit">Update</button>
</form>  

Для обновления номера комнаты мы должны создать обновленный маршрут, по которому мы собираемся получить номер списка учащегося и найти элемент, который имеет номер списка, и изменить свойство номера комнаты элемента на значение, полученное из формы обновления.

app.post("/update", (req, res) => {
    var requestedRollNo = req.body.rollNo;
    var newRoomNo = req.body.newroomno;
    
    students.forEach(student => {
        if (student.rollNo == requestedRollNo) {
            student.roomNo = newRoomNo;
        }
    })
    
    res.render("home", {
        data: students
    })
})

Шаг 6: Удалить запись: Обновление веб-страницы с возможностью удаления: Нам нужно создать форму, которая отправляет номер списка учащегося, который мы хотим удалить, в файл сервера «app.js».

<form action="/delete" method="post">
    <input type="number" style="display: none;" 
        name="rollNo" value="<%= element.rollNo %>">
    <button type="submit">Delete</button>
</form>

Для удаления учащегося мы должны создать маршрут удаления, в котором мы собираемся получить номер списка запрошенного учащегося, найти элемент с таким же номером списка и удалить элемент.

app.post("/delete", (req, res) => {
   var requestedRollNo = req.body.rollNo;
   var j = 0;
   students.forEach(students => {
       j = j + 1;
       if (students.rollNo === requestedRollNo) {
           students.splice((j - 1), 1)
       }
   })
   res.render("home", {
       data: students
   })
})

Полный код:

index.ejs

HTML




<!DOCTYPE html>
<html>
  
<head>
    <style>
        table {
            font-family: arial, sans-serif;
            border-collapse: collapse;
            width: 100%;
        }
  
        td,
        th {
            border: 1px solid #dddddd;
            text-align: left;
            padding: 8px;
        }
  
        tr:nth-child(even) {
            background-color: #dddddd;
        }
    </style>
</head>
  
<body>
    <h1>All Students</h1>
  
    <table>
        <tr>
            <th>Name</th>
            <th>Roll No.</th>
            <th>Room No.</th>
            <th>Hostel Name</th>
            <th>More Info.</th>
            <th>Update Room No.</th>
            <th>Delete</th>
        </tr>
        <% data.forEach(element=> { %>
            <tr>
                <td>
                    <%= element.name %>
                </td>
                <td>
                    <%= element.rollNo %>
                </td>
                <td>
                    <%= element.roomNo %>
                </td>
                <td>
                    <%= element.hostelName %>
                </td>
                <td>
                    <form action="/information" method="post">
                        <input type="number" style="display: none;" 
                            name="rollNo" value="<%= element.rollNo %>">
                        <button type="submit">More Info.</button>
                    </form>
                </td>
                <td>
                    <form action="/update" method="post">
                        <input type="number" style="display: none;" 
                            name="rollNo" value="<%= element.rollNo %>">
                        <input type="number" name="newroomno">
                        <button type="submit">Update</button>
                    </form>
                </td>
                <td>
                    <form action="/delete" method="post">
                        <input type="number" style="display: none;" 
                            name="rollNo" value="<%= element.rollNo %>">
                        <button type="submit">Delete</button>
                    </form>
                </td>
            </tr>
        <% }) %>
    </table>
  
    <h1>Add Student</h1>
  
    <form action="/" method="post">
        <input type="text" placeholder="Name" name="name">
        <input type="number" placeholder="Roll No." name="rollNo">
        <input type="text" placeholder="DOB" name="dateOfBirth">
        <input type="text" placeholder="City" name="city">
        <input type="number" placeholder="Number" name="number">