Всем привет! Сегодня мы напишем простое клиент-серверное приложение.
Используя платформу 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?)
Если вы все сделали правильно то увидим наших черепашек в окне браузера!
