Ładowanie

Client -> Server (ReactJS + ExpressJS)

⚙️ Część 1: Wprowadzenie

Połączenie Express.js i React.js pozwala stworzyć pełną aplikację typu full-stack — backend w Node/Express obsługuje dane, a frontend w React odpowiada za interfejs użytkownika.

Express.js działa jako serwer API, który dostarcza dane w formacie JSON. React.js działa jako aplikacja kliencka, która pobiera te dane i wyświetla je użytkownikowi.

Co chcemy osiągnąć:

  1. Utworzyć serwer Express zwracający dane JSON
  2. Utworzyć aplikację React
  3. Połączyć je – React pobierze dane z Expressa

📂 Część 2: Struktura projektu

W katalogu głównym projektu utwórz następującą strukturę:

projekt-fullstack/
│
├── server/          # backend Express
│   └── index.js
│
└── client/          # frontend React
    ├── src/
    └── package.json

Serwer i klient działają niezależnie, ale komunikują się przez HTTP (np. REST API).


💡 Część 3: Tworzenie serwera Express

W folderze server/ zainicjuj projekt i zainstaluj Express:

cd server
npm init -y
npm install express cors

Następnie utwórz plik index.js z prostym API:

const express = require('express');
const cors = require('cors');
const app = express();
const PORT = 5000;

app.use(cors());

app.get('/api/users', (req, res) => {
  res.json([
    { id: 1, name: 'Anna' },
    { id: 2, name: 'Marek' },
    { id: 3, name: 'Kasia' }
  ]);
});

app.listen(PORT, () => {
  console.log(`Serwer Express działa na http://localhost:${PORT}`);
});
📝 Wyjaśnienie:
  • cors() – pozwala Reactowi z innego portu łączyć się z API.
  • app.get('/api/users') – zwraca tablicę użytkowników w JSON.
  • Serwer działa lokalnie na porcie 5000.

⚛️ Część 4: Tworzenie aplikacji React

W folderze głównym utwórz aplikację React:

cd ..
npx create-react-app client

Po utworzeniu projektu przejdź do folderu client/ i uruchom aplikację:

cd client
npm start

Aplikacja React uruchomi się domyślnie na porcie 3000.


🔗 Część 5: Połączenie React z API Express

Otwórz plik client/src/App.js i zmodyfikuj go tak:

import React, { useState, useEffect } from 'react';

function App() {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    fetch('http://localhost:5000/api/users')
      .then(res => res.json())
      .then(data => setUsers(data))
      .catch(err => console.error(err));
  }, []);

  return (
    <div style={{ padding: '20px' }}>
      <h2>Użytkownicy z Express API</h2>
      <ul>
        {users.map(u => (
          <li key={u.id}>{u.name}</li>
        ))}
      </ul>
    </div>
  );
}

export default App;
📝 Wyjaśnienie:
  • fetch('http://localhost:5000/api/users') – pobiera dane z serwera Express.
  • useState – przechowuje listę użytkowników w stanie Reacta.
  • useEffect – wykonuje zapytanie po załadowaniu komponentu.

Po uruchomieniu Reacta zobaczysz listę użytkowników zwróconą przez serwer Express.


🌐 Część 6: Użycie Proxy (opcjonalne)

Aby nie pisać pełnego adresu http://localhost:5000 w każdym zapytaniu, można dodać proxy w pliku client/package.json:

"proxy": "http://localhost:5000"

Wtedy w React możesz pisać krócej:

fetch('/api/users')

React automatycznie przekieruje zapytanie do serwera Express.


📌 Podsumowanie

# Krok Opis
1 Express.js Tworzy backend i wystawia API (np. /api/users)
2 React.js Pobiera dane z API i wyświetla je w interfejsie
3 CORS Umożliwia Reactowi komunikację z Express przez inne porty
4 Proxy Ułatwia komunikację między frontendem a backendem bez pełnych adresów
5 Wynik React pobiera dane z Express i renderuje je na stronie

🏆 Dobre praktyki:

✓ Używaj cors() w Express, aby uniknąć błędów CORS

✓ Oddziel frontend i backend w osobnych folderach

✓ Dla większych projektów używaj narzędzi jak concurrently do wspólnego uruchamiania

✓ W produkcji buduj Reacta (npm run build) i serwuj go z Express

🎉 Koniec lekcji