Всем привет! Сегодня мы напишем простое клиент-серверное приложение.
Используя платформу nodejs напишем серверную часть нашего приложения. Клиентскую часть реализуем в браузере.
Как серверную, так и клиентскую части будем писать на языке программирования javascript, да-да не удивляйтесь, ведь nodejs и браузер являются хост-средами выполнения js-кода.
Для начала давайте разберемся что такое клиент-серверное приложение.
Клиент-серверные приложения представляют собой классическую модель распределенной системы, в которой две или более компьютерных программы общаются друг с другом для выполнения определенных задач. Этот тип архитектуры широко используется в современных технологиях и является основой для многих интернет-приложений, сервисов и сетевых решений.
Основные компоненты клиент-серверной модели:
Сервер: Это программное обеспечение или аппаратная платформа, которое предоставляет услуги другим компьютерам в сети. Сервер может обрабатывать запросы от клиентов, хранить данные и предоставлять доступ к этим данным. Клиент: Это программа, которая запрашивает у сервера определенные услуги или данные.
Клиент может быть установлен на любом устройстве (компьютер, смартфон, планшет) и может взаимодействовать с одним или несколькими серверами.
Начнем с написания серверной стороны
Установим nodejs
Windows
- Скачайте установщик:
- Перейдите на официальный сайт Node.js.
- Нажмите на кнопку "Download" и выберите версию для Windows (обычно LTS или Current).
- Запустите установщик:
- Откройте скачанный файл установщика.
- Примите условия лицензионного соглашения, нажав "Next".
- Выберите компоненты для установки (обычно все по умолчанию).
- Убедитесь, что опция "Add to PATH" отмечена.
- Нажмите "Install".
macOS
- Скачайте установщик:
- Перейдите на официальный сайт Node.js.
- Нажмите на кнопку "Download" и выберите версию для macOS (обычно LTS или Current).
- Запустите установщик:
- Откройте скачанный .pkg файл.
- Следуйте инструкциям установщика и нажимайте "Continue".
- Примите условия лицензионного соглашения, нажав "Agree"..
- Нажмите "Install" и введите ваш пароль для авторизации.
Linux based
- Ubuntu
- sudo apt update
- sudo apt install nodejs npm
- Fedora
- sudo dnf update
- sudo dnf install nodejs npm
- Arch
- sudo pacman -Syu
- sudo pacman -S nodejs npm
Вне зависимости от ОС проверьте установку компонентов.
В терминале или командной строке введите:
node -v
Если установка прошла успешно, вы увидите версию Node.js
npm -v
Если установка прошла успешно, вы увидите версию npm.
npm - это пакетный менеджер позволяющий управлять модулями.
Да я знаю про nvm, но в этой статье не об этом. Напишу пожалуй про nvm потом отдельно.
Ну наконец-то пишем сервер...
Почти. Создадим папку под названием myApp (я использую Linux и создал ее в своем домашнем каталоге, в macos справедливо сделать так-же, в windows предлагаю создать папку в корне диска С:\), внутри нее создадим еще две папки, одну назовем server - вторую client.
В терминале(командной строке) переходим к нашу папку server.
Windows
cd C:\myApp\server
Linux/Macos
cd ~/myApp/server
Проинициализируем наш проект и установим модули, необходимые нам для работы сервера(мы будем использовать самый популярный микрофреймворк express и так же нам потребуется установить модуль cors)
CORS не тема этой статьи. Примем пока факт того, что он нам нужен.
Отвлеклись. Продолжаем.
npm init -y npm i express cors
Создадим файл app.js
Можно файл создать клацая мышкой, а можно как ниндзя.
Windows
type nul > app.js
Linux/Macos
touch > app.js
Откройте проект в вашем радакторе кода.
После введенных команд получаем такую структуру нашего проекта:
> node_modules package-lock.json package.json app.js
Немного настроим наш проект. В качестве системы модулей будем использовать esmodules, также, напишем скрипт для запуска нашего сервера.
Откроем файл package.json, добавим в него поле "type", со значением "module". Напишем скрипт запуска, "start": "node app.js"
Было
{
"name": "client",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"cors": "^2.8.5",
"espress": "^0.0.0"
}
}
Стало
{
"name": "server",
"version": "1.0.0",
"main": "app.js",
"type": "module",
"scripts": {
"start": "node app.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"cors": "^2.8.5",
"express": "^5.1.0"
}
}
Открываем файл app.js и наконец-то пишем сервер... Да, серьезно.
'use strict'
// импортируем необходимые модули
import express from 'express'
import cors from 'cors'
// создаем объект приложения
const app = express()
// на порту 5000 будем запускать сервер
const PORT = 5000
/* промежуточный обработчик для
настройки HTTP-заголовков */
app.use(cors())
/* данные которые мы будем
передавать на клиент */
const turtles = ['Леонардо', 'Донателло', 'Микеланджело', 'Рафаэль']
/* обработчик get запроса по
адресу '/' */
app.get('/', (req, res) => res.send(turtles))
/* вызываем метод listen у сервера
он будет слушать порт 5000 */
app.listen(PORT, () => console.log(`Сервер запущен на порту ${PORT}`))
Это что весь код? Да, с сервером закончили. Осталось запустить.
npm start
В консоли увидим.
> server@1.0.0 start > node app.js Сервер запущен на порту 5000
Не закрывайте окно терминала, иначе сервер перестанет работать и клиентское приложение не сможет получить данные!
Кстати, черепашки это и есть те данные, которые мы будем передавать с сервера на клиент.
Пора создать клиентскую часть нашего приложения.
В качестве клиента будет выступать браузер, данные будем выводить на веб-страницу.
В директории myApp/client создадим файл index.html и откроем его в редакторе кода.
Напишем код клиентской части
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
body {
background-color: #000000;
}
#turtles {
width: 200px;
}
.turtle {
padding: 10px;
color: #ffffff;
}
.turtle:nth-child(1) {
background-color: #4966f6;
}
.turtle:nth-child(2) {
background-color: #7149a5;
}
.turtle:nth-child(3) {
background-color: #e84938;
}
.turtle:nth-child(4) {
background-color: #ff6800;
}
</style>
<body>
<div id="turtles"></div>
<script>
// Используем fetch API для выполнения GET-запроса
fetch('http://localhost:5000')
.then((response) => {
// Проверяем, если ответ успешный (код статуса 200-299)
if (!response.ok) {
throw new Error('Сетевой ответ не ok ' + response.statusText)
}
// Парсим JSON данные из ответа
return response.json()
})
.then((data) => {
// Обрабатываем распарсенные данные здесь
// Data это и есть наш массив с черепашками
// Добавляем наших черепашек в DOM-дерево
const turtles = document.getElementById('turtles')
data.forEach((element) => {
const turtle = document.createElement('p')
turtle.classList.add('turtle')
turtle.innerText = element
turtles.insertAdjacentElement('beforeEnd', turtle)
})
})
.catch((error) => {
// Обрабатываем возможные ошибки, возникающие во время выполнения fetch
console.error('Произошла проблема:', error)
})
</script>
</body>
</html>
Откроем файл index.html в браузере(например google chrome). Напоминаю, что сервер в этот момент запущен(помните, мы запустили его командой npm start?)
Если вы все сделали правильно то увидим наших черепашек в окне браузера!