Создание веб-приложения Chatroom на базе Node.js

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

В этой статье мы собираемся создать веб-приложение чата, используя Node.js. Веб-приложение Chatroom в основном используется для создания чата, похожего на групповой чат, куда пользователи могут приходить и присоединяться к группе/чату, отправлять сообщения в чат и просматривать сообщения других пользователей.

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

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

Шаг 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 %>

home.ejs

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

app.js

Javascript




const express = require("express")
const app = express()
app.set("view engine", "ejs")
  
app.get("/", (req, res) => {
     res.render("home", { variableName: "Hello World!" })
})
  
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: Получить текущих пользователей и их сообщения: у нас есть массив списков пользователей по умолчанию с их сообщениями. Давайте отправим массив на нашу веб-страницу и покажем список пользователей по умолчанию с их сообщениями. На предыдущем шаге мы просто отправляли значение переменной, теперь мы отправляем полный массив.

app.js

Javascript




const express = require("express")
const bodyParser = require("body-parser")
const users = [{
    userMessage: "Hi",
    userName: "Aditya Gupta"
}, {
    userMessage: "Hello",
    userName: "Vanshita Jaiswal"
}]
  
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: users
    })
})
  
app.listen(3000, (req, res) => {
    console.log("App is running on port 3000")
})

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

home.ejs

HTML




<!DOCTYPE html>
<html>
  
<head>
    <title>ChatRoom</title>
  
    <style>
        h2{
            margin: 12px 0px 0px 0px;
            padding: 0px;
        }
        p{
            margin: 0px;
            padding: 0px;
        }
    </style>
</head>
    
<body>
    <h1>ChatRoom</h1>
    <% data.forEach(element=> { %>
    <h2><%= element.userMessage %></h2>
      
<p> <%= element.userName %></p>
  
    <% }) %>
</body>
  
</html>

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

home.ejs

<h1>Add Message</h1>

<form action="/" method="post">
     <input type="text" placeholder="User Name"
          name="userName">
     <input type="text" placeholder="Message"
          name="userMessage">
     <button type="submit">Send</button>
</form>

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

app.js

app.post("/", (req, res) => {
   const inputUserName = req.body.userName
   const inputUserMessage = req.body.userMessage
   
   users.push({
       userName: inputUserName,
       userMessage: inputUserMessage,
   })
   
   res.render("home", {
       data: users
   })
})

Полный код:

app.js

Javascript




const express = require("express")
const bodyParser = require("body-parser")
const users = [{
        userMessage: "Hi",
        userName: "Aditya Gupta"
    },
    {
        userMessage: "Hello",
        userName: "Vanshita Jaiswal"
    }
]
  
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: users
    })
})
  
app.post("/", (req, res) => {
    const inputUserName = req.body.userName
    const inputUserMessage = req.body.userMessage
  
    users.push({
        userName: inputUserName,
        userMessage: inputUserMessage,
    })
  
    res.render("home", {
        data: users
    })
})
  
app.listen(3000, (req, res) => {
    console.log("App is running on port 3000")
})

home.ejs

HTML




<!DOCTYPE html>
<html>
  
<head>
    <title>ChatRoom</title>
  
    <style>
        h2 {
            margin: 12px 0px 0px 0px;
            padding: 0px;
        }
  
        p {
            margin: 0px;
            padding: 0px;
        }
    </style>
</head>
    
<body>
    <h1>ChatRoom</h1>
    <% data.forEach(element=> { %>
    <h2><%= element.userMessage %></h2>
      
<p>by <%= element.userName %></p>
  
    <% }) %>
  
    <h1>Add Message</h1>
  
    <form action="/" method="post">
        <input type="text" placeholder="User Name"
               name="userName">
        <input type="text" placeholder="Message"
               name="userMessage">
        <button type="submit">Send</button>
    </form>
</body>
  
</html>

Шаги для запуска приложения: Внутри терминала введите команду для запуска вашего скрипта.

node app.js

Выход: