¿Cómo construir un sistema de gestión de albergues usando Node.js?

En este artículo, vamos a crear un sistema de gestión de albergues. Se utiliza un sistema de gestión de albergues para administrar el registro de estudiantes de una universidad a la que la universidad proporciona un albergue, donde una universidad puede ver todos los datos de los estudiantes, incluidos sus nombres, número de registro, fecha de nacimiento, ciudad, número de teléfono, teléfono del padre número, número de habitación y nombre del albergue. La universidad puede agregar nuevos estudiantes, eliminar el registro de los estudiantes existentes y cambiar el número de habitación de los estudiantes.

Funcionalidades: una universidad puede hacer lo siguiente con este sistema de gestión de albergues:

  • Mostrar registros de estudiantes
  • Agregar nuevos estudiantes 
  • Eliminar registros de estudiantes
  • Obtenga información particular del estudiante por su número de registro
  • Actualizar el número de habitación del estudiante

Enfoque: Vamos a utilizar Body Parser mediante el cual podemos capturar los valores de entrada del usuario del formulario, como el nombre del estudiante, el número de registro, la fecha de nacimiento, la ciudad, el número de teléfono, el número de teléfono del padre, el número de habitación y el nombre y la tienda del albergue. ellos en una colección. Luego enviaremos los datos del estudiante a la página web usando EJS. EJS es un middleware que facilita el envío de datos desde su archivo de servidor (app.js o server.js) a una página web.

También vamos a crear la Ruta de Eliminación para eliminar registros de Estudiantes, una Ruta de Información para obtener información sobre un Estudiante por su Número de Lista y una Ruta de Actualización para actualizar el número de habitación de un Estudiante.

Implementación: A continuación se muestra la implementación paso a paso del enfoque anterior.

Paso 1: Configuración del proyecto

Inicializa NPM: cree y ubique la carpeta de su proyecto en la terminal y escriba el comando

npm init -y

Inicializa nuestra aplicación de Node y crea un archivo package.json.

Instale dependencias: ubique el directorio de su proyecto raíz en la terminal y escriba el comando

npm install express ejs body-parser

Para instalar Express, EJS y Body Parser como dependencias dentro de su proyecto

Crear archivo de servidor: cree un archivo ‘app.js’, dentro de este archivo se requiere el módulo Express y cree una ‘aplicación’ constante para crear una instancia del módulo express, luego configure EJS como el motor de vista predeterminado.

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

Reorganice sus directorios: se requiere usar ‘.ejs’ como extensión para el archivo HTML en lugar de ‘.html’ para usar EJS dentro de él. Luego, debe mover todos los archivos ‘.ejs’ en el directorio de vistas dentro de su directorio raíz. EJS busca por defecto los archivos ‘.ejs’ dentro de la carpeta de vistas.

Use la variable EJS: dentro de su archivo .ejs actualizado, debe usar variables EJS para recibir valores de su archivo de servidor. Puede declarar variables en EJS como

<%= variableName %>

HTML

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

Envíe datos a una variable: dentro de su archivo de servidor ( app.js o index.js ), puede enviar un archivo EJS junto con algunos datos utilizando el método de procesamiento.

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")
})

Obtener datos del formulario a app.js: para recibir valores de entrada de un formulario, tenemos que usar un paquete de Nodes llamado body-parser.

Instale el analizador de cuerpo:

npm install body-parser

Requerir módulo analizador de cuerpo:

const bodyParser = require('body-parser')

Y entonces:

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

Entonces podemos manejar los datos del formulario usando el objeto de solicitud.

Paso 2: Obtenga los registros de los estudiantes: Tenemos una variedad de estudiantes con diferentes propiedades. Enviemos la array a nuestra página web. En el paso anterior, solo enviamos un valor a la variable, ahora estamos enviando la array completa.

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")
})

Dado que tenemos tantos elementos dentro de nuestra array y tenemos que imprimir cada uno de ellos, tenemos que usar For Each Loop para recorrer cada elemento dentro de nuestra colección y mostrar los detalles.

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>

Paso 3: agregue estudiantes a la lista: para esto, debemos crear un formulario y manejar los datos del formulario dentro de nuestro archivo ‘app.js’ usando 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>

Manejar datos de formulario dentro de ‘app.js’: tenemos que obtener valores de un formulario usando req.body.valueName, y luego organizarlo como un objeto y empujarlo dentro de la array de nuestro estudiante.

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
   })
})

Paso 4: Más información: Actualización de la página web dando una opción ‘más’ : Tenemos que crear un formulario que envíe al estudiante el número de lista de los datos que queremos obtener del archivo del servidor ‘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>

Para obtener información sobre los estudiantes, debemos crear una ruta de información en la que vamos a obtener el número de registro del estudiante solicitado y buscar el elemento que tiene el mismo número de registro, y enviar todos los datos sobre ese estudiante a la página web en JSON.

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

Paso 5: Actualizar número de salón: Actualización de la página web dando una opción de ‘actualización’ : Tenemos que crear un formulario que envíe el número de lista del estudiante, qué número de salón queremos actualizar y el nuevo número de salón al archivo del servidor ‘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>  

Para actualizar el número de habitación, tenemos que crear una ruta actualizada donde vamos a obtener el número de lista del estudiante y buscar el elemento que tiene el número de lista, y cambiar la propiedad del número de habitación del elemento al valor obtenido del formulario de actualización.

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
    })
})

Paso 6: Eliminar registro: Actualización de la página web dando una opción de eliminación: Tenemos que crear un formulario que envíe el número de registro del estudiante que queremos eliminar al archivo del servidor ‘app.js’.

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

Para eliminar un estudiante, tenemos que crear una ruta de eliminación en la que vamos a obtener el número de lista del estudiante solicitado y buscar el elemento que tiene el mismo número de lista y eliminar el elemento.

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
   })
})

Código completo:

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">
        <input type="number" placeholder="Father's Number" 
            name="fatherNumber">
        <input type="number" placeholder="Room No." name="roomNo">
        <input type="text" placeholder="Hostel Name" name="hostelName">
        <button type="submit">Add</button>
    </form>
</body>
  
</html>

aplicación.js

Javascript

const express = require('express')
const bodyParser = require('body-parser')
const students = [{
    name: "Aditya Gupta",
    rollNo: 413020,
    dateOfBirth: "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.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
    })
})
  
app.post('/information', (req, res) => {
    var requestedRollNo = req.body.rollNo;
    students.forEach(student => {
        if (student.rollNo == requestedRollNo) {
            res.json(student)
        }
    })
})
  
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
    })
})
  
app.post('/delete', (req, res) => {
    var requestedRollNo = req.body.rollNo;
    var j = 0;
    students.forEach(student => {
        j = j + 1;
        if (student.rollNo === requestedRollNo) {
            students.splice((j - 1), 1)
        }
    })
    res.render("home", {
        data: students
    })
})
  
app.listen(3000, (req, res) => {
    console.log("App is running on port 3000")
})

Producción:

 

Publicación traducida automáticamente

Artículo escrito por devaadi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *