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

Опубликовано: 7 Октября, 2022

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

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

  • Показать всех пациентов
  • Добавить новых пациентов
  • Не добавляйте новых пациентов, если кровати недоступны
  • Выписка пациентов

Подход: мы собираемся использовать 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");

Мы также создаем константу availableBeds и устанавливаем для нее количество доступных кроватей.

const availableBeds = 2;

Переупорядочите свои каталоги : необходимо использовать «.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 patients = [{
    name: "Aditya",
    number: "8175826846",
    dob: "29/09/2001",
    city: "Mirzapur",
    roomNo: "1",
}]
  
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: patients
    })
})
  
app.listen(3000, (req, res) => {
    console.log("App is running on port 3000")
})

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

HTML




<!DOCTYPE html>
<html>
  
<head>
    <title>HMS</title>
</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>
  
<body>
    <h1>All Patients</h1>
    <table>
        <tr>
            <th>Name</th>
            <th>Number</th>
            <th>DOB</th>
            <th>City</th>
            <th>Room No.</th>
        </tr>
        <% data.forEach(element=> { %>
            <tr>
                <td>
                    <%= element.name %>
                </td>
                <td>
                    <%= element.number %>
                </td>
                <td>
                    <%= element.dob %>
                </td>
                <td>
                    <%= element.city %>
                </td>
                <td>
                    <%= element.roomNo %>
                </td>
            </tr>
        <% }) %>
    </table>
</body>
  
</html>

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

<form action="/" method="post">
    <input type="text" placeholder="Name" name="name">
    <input type="number" placeholder="Number" name="number">
    <input type="text" placeholder="DOB" name="dob">
    <input type="text" placeholder="City" name="city">
    <button type="submit">Add</button>
</form>

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

app.post("/", (req, res) => {
    const name = req.body.name
    const number = req.body.number
    const dob = req.body.dob
    const city = req.body.city
    if (patients.length < availableBeds) {
        const roomNo = patients.length + 1;
       
        patients.push({
            name: name,
            number: number,
            dob: dob,
            city: city,
            roomNo: roomNo
        })
       
        res.render("home", {
            data: patients
        })
    } 
    else {
        res.send("No room available");
    }
})

Мы толкаем пациентов только в том случае, если есть свободные койки, если нет, то просто возвращаем сообщение Нет свободных мест.

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

<form action="/discharge" method="post">
    <input type="text" style="display: none;" 
        name="name" value="<%= element.name %>">
        <button type="submit">Discharge</button>
</form>

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

app.post("/discharge", (req, res) => {
   var name = req.body.name;
   var j = 0;
   patients.forEach(patient => {
       j = j + 1;
       if (patient.name == name) {
           patients.splice((j - 1), 1)
       }
   })
   res.render("home", {
       data: patients
   })
})

Полный код:

app.js

Javascript




const express = require("express")
const bodyParser = require("body-parser")
const patients = [{
    name: "Aditya",
    number: "8175826846",
    dob: "29/09/2001",
    city: "Mirzapur",
    roomNo: "1",
}]
const availableBeds = 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: patients
    })
})
  
app.post("/", (req, res) => {
    const name = req.body.name
    const number = req.body.number
    const dob = req.body.dob
    const city = req.body.city
    if (patients.length < availableBeds) {
        const roomNo = patients.length + 1;
  
        patients.push({
            name: name,
            number: number,
            dob: dob,
            city: city,
            roomNo: roomNo
        })
  
        res.render("home", {
            data: patients
        })
    
    else {
        res.send("No room available");
    }
})
  
app.post("/discharge", (req, res) => {
    var name = req.body.name;
  
    var j = 0;
    patients.forEach(patient => {
        j = j + 1;
        if (patient.name == name) {
            patients.splice((j - 1), 1)
        }
    })
  
    res.render("home", {
        data: patients
    })
})
  
app.listen(3000, (req, res) => {
    console.log("App is running on port 3000")
})

home.ejs

HTML




<!DOCTYPE html>
<html>
  
<head>
    <title>HMS</title>
</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>
  
<body>
    <h1>All Patients</h1>
    <table>
        <tr>
          <th>Name</th>
          <th>Number</th>
          <th>DOB</th>
          <th>City</th>
          <th>Room No.</th>
          <th>Discharge</th>
        </tr>
    <% data.forEach(element=> { %>
        <tr>
            <td><%= element.name %></td>
            <td><%= element.number %></td>
            <td><%= element.dob %></td>
            <td><%= element.city %></td>
            <td><%= element.roomNo %></td>
            <td>
                <form action="/discharge" method="post">
                    <input type="text" style="display: none;" 
                           name="name" value="<%= element.name %>">
                    <button type="submit">Discharge</button>
                  </form>
            </td>
          </tr>
          <% }) %>
        </table>
    <h1>Add Patient</h1>
  
    <form action="/" method="post">
        <input type="text" placeholder="Name" name="name">
        <input type="number" placeholder="Number" name="number">
        <input type="text" placeholder="DOB" name="dob">
        <input type="text" placeholder="City" name=