React w wersji produkcyjnej

0

Cześć,
od kilku dni staram się postawić produkcyjnie front napisany w ReactJs.
W środowisku developerskim wszystko fajnie działa. Na czystym vps postawiłem backend w javie, wrzuciłem projekt React na serwer i wywołując komendę npm start
projekt startuje i pobiera wszelkie niezbędne dane z backendu.
Schody zaczynają się kiedy próbuje odpalić reacta w wersji produkcyjnej. Docelowo chciałbym cały front wrzucić do dockera ale teraz dla testu
uruchamiam npm run build, niby wszystko się buduję ok, tworzy się katalog build
następnie odpalam serve -s build
strona startuję można się na nią dostać jednak nie pobiera żadnych danych z backendu.
w package.json mam "proxy": "http://localhost:8080/"

Poniżej przykład jak w react pobieram dane:

await fetch(url, {
     method: 'GET',
     withCredentials: true,
     credentials: 'include',
     headers: {
         'Content-Type': 'application/json'
     }
     })
    	  .then(async response => {
        	const isJson = response.headers.get('content-type')?.includes('application/json');
        	data = isJson && await response.json();
        	if (!response.ok) {
              const error = (data && data.message) || response.status;
              responseStatus = response.status;
              return Promise.reject(error);
          }else{
            return data;
          }
    	  })
    	  .catch((error) => {
      errorMessage = error.toString();
});

return data;

Nie bardzo wiem jak rzucić na konsole cały adres z którego próbuje pobierać dane react, w internecie wyczytałem, że wersji prod strzela na localhost:3080 a nie bierze z package.json ?

Wiem, że metoda którą wyżej opisałem raczej nie będzie docelowo dobra na prod, kombinowałem z takim rozwiązaniem:
https://medium.com/bb-tutorials-and-thoughts/how-to-develop-and-build-react-app-with-nodejs-bc06fa1c18f3
jednak tam w projekcie nodjs jest expres i obsługa requestów z reacta, ja chciałbym żeby react po dane strzelał bezpośrednio na localhost:8080 gdzie chodzi Java o ile jest taka opcja.

Będę wdzięczny za wszelkie podpowiedzi jak można odpalić taki projekt w wersji prod.

1

Twoje zagadnienie jest niezrozumiale. piszesz skrotami ktore tylko ty rozumiesz.

"Schody zaczynają się kiedy próbuje odpalić reacta w wersji produkcyjnej. Docelowo chciałbym cały front wrzucić do dockera ale teraz dla testu
uruchamiam npm run build, niby wszystko się buduję ok, tworzy się katalog build"

Chcialbym wrzucic do dockera ale teraz dla testu uruchamiam npm run buid - ale gdzie to uruchamiasz na produkcji , na developerskim testowym VPS ?
niby wszystko się buduję ok to sie zdecysduj czy sie buduje czy sie niby buduje ? bo jesli niby sie buduje to niby powinno dzialac.
na devie wszystko sobie budujesz a potem wrzucasz gotowe na poroda. nie robisz npm build na produkcji przeciez

0

Racja, jak teraz na to patrzę faktycznie opis jest nieco chaotyczny.
Więc do tej pory projekt uruchamiany był tylko lokalnie. Aplikacja w React łączyła się z backendem i wszystko działało.
Lokalnie po stronie Reacta w folderze z projektem uruchamiałem npm start i wszystko działało lokalnie na moim komputerze.

Kupiłem dostęp do vps i chciałem projekt udostępnić w internecie. vps jest tylko jeden i tam ma działać wersja produkcyjna.
Nie bardzo wiedziałem jak ta wersja produkcyjna ma wyglądać, ponieważ dopiero zaczynam uczyć się reacta dlatego na początku na vps uruchomiłem backend, przeniosłem cały
projekt Reacta 1:1 na vps i w folderze z projektem odpaliłem npm start i w takiej konfiguracji projekt działał.
Następnie przyszedł czas na uruchomienie wersji produkcyjnej czyli w w folderze z projektem Reacta wykonałem npm run build powstał folder.
Tu zaczęły się schody bo nie wiedziałem jak uruchomić to co się zbudowało, wykonywałem komendę serve -s build jak było w podpowiedzi w terminalu i generalnie strona się otwierała,
layout był widoczny ale nie pobierały się żadne dane z backendu czyli wydawało mi się że to co jest w package.json: "proxy": "http://localhost:8080/" nie działa.
W sumie sam sobie odpowiedziałem linkiem do artykułu który wkleiłem, że pomiędzy aplikacją React a backendem musi być jeszcze serwer proxy.
Więc utworzyłem aplikację nodejs identycznie jak w artykule, a jedynie wprowadziłem zmiany w server.js na takie

const express = require('express');
const path = require('path');
const app = express(),
port = 3080;

var httpProxy = require('http-proxy');
var apiProxy = httpProxy.createProxyServer();

app.use(express.static(path.join(__dirname, '../app/build')));

var backend = 'http://localhost:8080';
app.all("/rest/*", function (req, res) {
  apiProxy.web(req, res, { target: backend });
});

app.get('/*', (req, res) => {
  res.sendFile(path.join(__dirname, '../app/build/index.html'));
});

app.listen(port, () => {
  console.log(`Server listening on the port::${port}`);
});

i teraz już cały projekt działa.
Mam nadzieję, że teraz jest trochę lepiej opisany problem i rozwiązanie ;)

0

@piotr_c88: jeszcze nie mam wypracowanej metody jak będę podmieniał wersje na prod, mam tam repo projektu więc może lokalnie git push a na serwerze jakiś skrypt który wykona build i podmieni pliki. Albo tak jak piszesz, ważne, że udało się odpalić ;)

4

Ale wiesz że jak odpalasz npm start to on stawia developerski serwer który nie nadaje się zupełnie do produkcyjnych celów?

Jeśli masz apkę frontową w reakcie, i odpalisz npm build, i faktycznie Ci się stworzy folder build/ (nie wiem czy to robisz webpackiem czy czym), to w tym folderze build/ jest Twoja aplikacja którą Twój server (np apache lub nginx) musi zaserwować klientowi.

A jak chcesz strzelać AJAX'ami, to najlepiej by było gdybyś strzelał do serwera ktory zaserował apkę, i na tym samym porcie.

0

@TomRiddle:

Jeśli masz apkę frontową w reakcie, i odpalisz npm build, i faktycznie Ci się stworzy folder build/ (nie wiem czy to robisz webpackiem czy czym), to w tym folderze build/ jest Twoja aplikacja którą Twój server (np apache lub nginx) musi zaserwować klientowi.
A jak chcesz strzelać AJAX'ami, to najlepiej by było gdybyś strzelał do serwera ktory zaserował apkę, i na tym samym porcie.

Wchodzę w folder z aplikacją react i wykonuję npm build, tworzy się folder który przenoszę na serwer.
Gdzieś przewinęła mi się nazwa webpack ale nie bardzo wiem co to jest i jak tego używać :)
Tak jak napisałem w poprzednim poście utworzyłem kolejną aplikację w nodeJs która przekazuję requesty między reactem a backendem.
server.js z aplikacji nodeJs wkleiłem wyżej.
Cały front wrzuciłem do dockera i uruchamiam w taki sposób:
CMD ["pm2-runtime", "start", "server.js"]

nad tym wszystkich jest jeszcze nginx który przekierowuję domenę na port na którym działa appka

1
piotr_c88 napisał(a):

Wchodzę w folder z aplikacją react i wykonuję npm build, tworzy się folder który przenoszę na serwer.
[...]
Tak jak napisałem w poprzednim poście utworzyłem kolejną aplikację w nodeJs która przekazuję requesty między reactem a backendem.

A czemu apka w react'cie sama nie strzela do backendu?

0
TomRiddle napisał(a):
piotr_c88 napisał(a):

Wchodzę w folder z aplikacją react i wykonuję npm build, tworzy się folder który przenoszę na serwer.
[...]
Tak jak napisałem w poprzednim poście utworzyłem kolejną aplikację w nodeJs która przekazuję requesty między reactem a backendem.

A czemu apka w react'cie sama nie strzela do backendu?

To był powód dla którego powstał ten post :)
apka w react nie strzela sama do bakendu ponieważ nie widziałem jak to zrobić (Produkcyjnie)
kiedy lokalnie odpalam projekt react, czyli wchodzę do katalogu i npm start aplikacja starutuje i pobiera dane dane backendu.
Ale kiedy wykonam npm build i chce uruchomić skompilowany projekt wtedy już aplikacja nie strzela do backendu. Nie wiem czemu, nie udało mi się finalnie tego ustalić poza niepotwierdzonymi informacjami, że to co mam w package.json czyli "proxy": "http://localhost:8080/", działa tylko w środowisku developerskim.
Nie wiem jak to finalnie jest i jak to sprawdzić ale faktycznie po uruchomieniu skompilowanego projektu żaden request do backendu nie trafia...

0
piotr_c88 napisał(a):

apka w react nie strzela sama do bakendu ponieważ nie widziałem jak to zrobić (Produkcyjnie)

No ale czemu nie? Po prostu robisz fetch('/endpoint'), i apka w React'cie strzela pod /endpoint na hoście z którego została odpalona.

Ale kiedy wykonam npm build i chce uruchomić skompilowany projekt wtedy już aplikacja nie strzela do backendu. Nie wiem czemu, nie udało mi się finalnie tego ustalić poza niepotwierdzonymi informacjami, że to co mam w package.json czyli "proxy": "http://localhost:8080/", działa tylko w środowisku developerskim.
Nie wiem jak to finalnie jest i jak to sprawdzić ale faktycznie po uruchomieniu skompilowanego projektu żaden request do backendu nie trafia...

Na pewno strzelasz pod dobry port?

Jak Twój backend stoi np na 9000, to apka reactowa musi strzelić pod 9000 port.

0

Może zamiast tego proxy to spróbuj ustawić zmienne środowiskowe https://create-react-app.dev/docs/adding-custom-environment-variables/

Wtedy mógłbyś zmieniać ten adres API w zależności od środowiska test / dev / production.

0
TomRiddle napisał(a):
piotr_c88 napisał(a):

apka w react nie strzela sama do bakendu ponieważ nie widziałem jak to zrobić (Produkcyjnie)

No ale czemu nie? Po prostu robisz fetch('/endpoint'), i apka w React'cie strzela pod /endpoint na hoście z którego została odpalona.

Ale kiedy wykonam npm build i chce uruchomić skompilowany projekt wtedy już aplikacja nie strzela do backendu. Nie wiem czemu, nie udało mi się finalnie tego ustalić poza niepotwierdzonymi informacjami, że to co mam w package.json czyli "proxy": "http://localhost:8080/", działa tylko w środowisku developerskim.
Nie wiem jak to finalnie jest i jak to sprawdzić ale faktycznie po uruchomieniu skompilowanego projektu żaden request do backendu nie trafia...

Na pewno strzelasz pod dobry port?

Jak Twój backend stoi np na 9000, to apka reactowa musi strzelić pod 9000 port.

Ok, zrobiłem szybki test lokalnie.
Odpaliłem backend, chodzi na porcie http://localhost:8080
wchodzę do folderu z aplikacją react i npm start
projekt startuje wszystko działa, dane się pobierają.
Teraz ponownie w folderze z aplikacją wykonuje npm run build
tworzy się folder i zgodnie z podpowiedzią:

The build folder is ready to be deployed.
You may serve it with a static server:

  serve -s build

zgodnie z podpowiedzią odpalam serve -s build
strona się ładuję ale dane już się nie pobierają, aplikacja nie strzela http://localhost:8080 i nie wiem gdzie próbuje strzelać. Można to jakoś logować w react?

0

Możesz sobie to sprawdzić w przeglądarce jeśli otworzysz devtoolsy i przejdziesz do zakładki network.

screenshot-20220222201332.png

0

@Xarviel: ale widzisz gdzieś tam pełny adres endpointa z którego chce pobrać dane? łącznie z portem? bo nic takiego tu nie widzę

0
piotr_c88 napisał(a):

@Xarviel: ale widzisz gdzieś tam pełny adres endpointa z którego chce pobrać dane? łącznie z portem? bo nic takiego tu nie widzę

Ale to Ty masz włączyć narzędzia developerskie w przeglądarce u Ciebie w aplikacji, i zobaczyć gdze ona strzela. @Xarviel wrzucił tylko poglądowego screena

0
piotr_c88 napisał(a):

na jego screenie raczej bym nie szukał tego gdzie strzela moja aplikacja ;) chodzi mi o to czy takie dane są dostępne na poziomie przeglądarki, pełny adres endpointa? Nigdzie nie widzę pełnego adresu tylko to co daje w fetch czyli np. /adverb, nie widzę co jest wcześniej

Oczywiście że są, przecież to przeglądarka robi request.

Prawy na tabelce:

screenshot-20220222203242.png

1
piotr_c88 napisał(a):

:D czyli strzela sama w siebie? :D

No dokładniej mówiąc, wystawiasz jedną aplikację z jednego portu. To że Ty wiesz że ona się skłąda z Twojego backendu i frontu to inna sprawa.

ciężko będzie wystawić backend i front na jednym porcie :D Serving! - Local: http://localhost:3000 jeśli jest tak jak mówisz czyli strzela na 3000 to czemu nie korzysta z "proxy": "http://localhost:8080/", ?

A czemu miałby? Po pierwsze nie ma powodu żeby tak działać; bo to jest zbudowana wersja produkcyjna, a po drugie to byłoby głupie.

nie jestem frontendowcem ale po stronie przeglądarki to chyba powinien być ukryty końcowy endpoint z którego react pobiera dane...

No ale przecież aplikacja w Reacie to tylko klient. Tak czy tak musisz wystawić endpoint z backendu, nie ma rady. Jakiekolwiek "ukrywanie go" nie ma sensu; bo po to właśnie masz backend żeby otworzyć port i wystawić interfejs.

Uwaga

@piotr_c88: Wydaje mi się że coś Cię wprowadziło w błąd i teraz masz takie spaczone podejście.

Uwaga: To że w serverze developerskim masz front na jednym porcie i backend na drugim - to nic nie znaczy. To jest tylko na potrzeby developmentu żebyś miał HMR'y, source-mapy, debugger i inne narzędzia pomocne przy developerce. Na produkcji backend stoi na jednym porcie, i serwuje zbudowany front. Front już wtedy nie stoi na osobnym porcie, nie ma swojego procesu tak jak podczas developmentu. Po prostu jest statycznymi plikami HTML, JS i CSS, nie ma potrzeby serwować ich osobno; a wręcz byłoby to szkodliwe, np przez CORS.

0

@TomRiddle:

@piotr_c88: Wydaje mi się że coś Cię wprowadziło w błąd i teraz masz takie spaczone podejście.

Uwaga: To że w serverze developerskim masz front na jednym porcie i backend na drugim - to nic nie znaczy. To jest tylko na potrzeby developmentu żebyś miał HMR'y, source-mapy, debugger i inne narzędzia pomocne przy developerce. Na produkcji backend stoi na jednym porcie, i serwuje zbudowany front. Front już wtedy nie stoi na osobnym porcie, nie ma swojego procesu tak jak podczas developmentu. Po prostu jest statycznymi plikami HTML, JS i CSS.

To faktycznie mam zupełnie inne podejście bo w mojej wersji produkcyjnej front i backend to 2 osobne aplikację wystawione na rożnych portach które porostu się ze sobą komunikują i zupelnie nie rozumiem czemu miałoby służyć łączenie tego w jedną wielką aplikację :)

0
piotr_c88 napisał(a):

@TomRiddle:

@piotr_c88: Wydaje mi się że coś Cię wprowadziło w błąd i teraz masz takie spaczone podejście.

Uwaga: To że w serverze developerskim masz front na jednym porcie i backend na drugim - to nic nie znaczy. To jest tylko na potrzeby developmentu żebyś miał HMR'y, source-mapy, debugger i inne narzędzia pomocne przy developerce. Na produkcji backend stoi na jednym porcie, i serwuje zbudowany front. Front już wtedy nie stoi na osobnym porcie, nie ma swojego procesu tak jak podczas developmentu. Po prostu jest statycznymi plikami HTML, JS i CSS.

To faktycznie mam zupełnie inne podejście bo w mojej wersji produkcyjnej front i backend to 2 osobne aplikację wystawione na rożnych portach które porostu się ze sobą komunikują i zupelnie nie rozumiem czemu miałoby służyć łączenie tego w jedną wielką aplikację :)

To będą dwie aplikacje. Jedna jest serwerem, druga jest klientem.

Ale nie dystrybuujesz ich osobno; to nie jest tak jak z grą, że stoi np serwer Wowa; i Ty żeby mieć klienta Wowa musisz go ściągnąć i zainstalować na kompie.

W webówce, owszem jest klient i server; ale userzy "dostają" klienta; uprzednio strzelając do serwera, ściągają go (czyli ładują JS'a, Twojego Reacta), i uruchamiają (dokładniej mówiąc przeglądarka im go uruchamia w sobie), i potem ten klient się łączy do tego samego serwera z którego został pobrany.

To o czym Ty mówisz, to jest jakbyś chciał wejść na stronę strona:8081, pokazał Ci się apka w reakcie, i ona miałby strzelać pod spodem do strona:8082. Tylko pierwsze pytanie po co; skoro mogłaby pod 8081, a po drugie CORS; a po trzecie po co dwa serwery (jeden backend, drugi serwujący front) skoro można jeden.

0

@TomRiddle:

To o czym Ty mówisz, to jest jakbyś chciał wejść na stronę strona:8081, pokazał Ci się apka w reakcie, i ona miałby strzelać pod spodem do strona:8082. Tylko pierwsze pytanie po co; skoro mogłaby pod 8081, a po drugie CORS; a po trzecie po co dwa serwery (jeden backend, drugi serwujący front) skoro można jeden.

Dokładnie tak, strona:8081 jest wystawiona na zewntąrz a pod spodem łączy się z backendem strona:8082 serwerem uwierzytelniającym strona:8083 itd
poza tym z backendu pobiera jeszcze dane appka mobilna :)

generalnie podoba mi się ta wersja którą udało mi się teraz osiągnąć na prod czyli zbudowana aplikacja react, nad nią nodeJs (jak wygląda server.js wrzuciłem kilka postów temu) i dalej obok backend.
Mam nadizeje, że w takiej konfiguracji nie będzie problemów z CORS

0
piotr_c88 napisał(a):

@TomRiddle:

To o czym Ty mówisz, to jest jakbyś chciał wejść na stronę strona:8081, pokazał Ci się apka w reakcie, i ona miałby strzelać pod spodem do strona:8082. Tylko pierwsze pytanie po co; skoro mogłaby pod 8081, a po drugie CORS; a po trzecie po co dwa serwery (jeden backend, drugi serwujący front) skoro można jeden.

Dokładnie tak, strona:8081 jest wystawiona na zewntąrz a pod spodem łączy się z backendem strona:8082 serwerem uwierzytelniającym strona:8083 itd
poza tym z backendu pobiera jeszcze dane appka mobilna :)

Ale czego nie rozumiesz w tym że zbudowana aplikacja frontowa to są static file'sy, HTML, JS i CSS: i nie wymagają osobnego serwowania? Spokojnie możesz wystawić na jednym porcie zarówno klienta jak i API serwera.

generalnie podoba mi się ta wersja którą udało mi się teraz osiągnąć na prod czyli zbudowana aplikacja react, nad nią nodeJs (jak wygląda server.js wrzuciłem kilka postów temu) i dalej obok backend.
Mam nadizeje, że w takiej konfiguracji nie będzie problemów z CORS

Będą; bo host strona:8081 to jest inny origin niż strona:8082, dla przeglądarki to różne serwery.

0

@TomRiddle: ale przeglądarka nic nie wiem o strona:8082...
w konfiguracji jaka jest teraz na produkcji u mnie nigdzie w przeglądarce nie znajdziesz adresu backendy ani portu z jakiego react pobiera dane...

0
piotr_c88 napisał(a):

@TomRiddle: ale przeglądarka nic nie wiem o strona:8082...
w konfiguracji jaka jest teraz na produkcji u mnie nigdzie w przeglądarce nie znajdziesz adresu backendy ani portu z jakiego react pobiera dane...

To skąd przeglądarka wie gdzie strzelać? :> Requesty idą jakimś magicznym tunelem?

0

@TomRiddle: ona zawsze strzela na strona:8081 a nodeJs dalej przekierowuje, tak to rozumiem.
Nie znam się na froncie ale naprawdę bardzo bym się zdziwił, że w przypadku gdy mam aplikacje react wystawioną na xx.xxx.xx:3080 zobaczył gdzieś w dev tols dokładny link z portem do backendu z którego react pobiera dane :)

0
piotr_c88 napisał(a):

@TomRiddle: ona zawsze strzela na strona:8081 a nodeJs dalej przekierowuje, tak to rozumiem.
Nie znam się na froncie ale naprawdę bardzo bym się zdziwił, że w przypadku gdy mam aplikacje react wystawioną na xx.xxx.xx:3080 zobaczył gdzieś w dev tols dokładny link z portem do backendu z którego react pobiera dane :)

No ale dokładnie tak jest, i tak działa praktycznie każda inna SPA, czy to React, Vue, Angular, Preact, Stencil, czy nawet zwykłe AJAX'y z fetch() lub jQuery.

Nie wiem czemu sobie umyślałeś żeby otwierać ze swojego servera dwa porty; jeden do zwrócenia frontu; a drugi do obsługi API. Chociażby z tego powodu to nie ma sensu; że wtedy klienci muszą zrobić dwa połączenia TCP; zamiast jednego.

@piotr_c88: Masz jaki kolwiek powód żeby otwierać dwa porty, zamiast jednego?

0

@TomRiddle: pogubiłem się :D moja aplikacja działa na jednym porcie xx.xxx.xx:3080 i tu jest wystawiona. Nikt kto ją otwiera nie ma bezpośredniego dostępu do strona:8082 czy strona:8083, z tych portów korzysta react ale one są ukryte dla osób wchodzących na xx.xxx.xx:3080 więc przeglądarka nie widzie strona:8082 czy strona:8083

1
piotr_c88 napisał(a):

@TomRiddle: pogubiłem się :D moja aplikacja działa na jednym porcie xx.xxx.xx:3080 i tu jest wystawiona. Nikt kto ją otwiera nie ma bezpośredniego dostępu do strona:8082 czy strona:8083, z tych portów korzysta react ale one są ukryte dla osób wchodzących na xx.xxx.xx:3080 więc przeglądarka nie widzie strona:8082 czy strona:8083

;|

Mówimy o aplikacji webowej? Takiej przeglądarkowej? Ktoś otwiera Chrome, wpisuje http://strona:3080/ i pokazuje mu się Twoja strona w React'cie, tak?

I teraz Ty mówisz, że ten React pod spodem, AJAX'ami strzela do strona:8082, oraz strona:8083, w taki sposób że klient (czyli przeglądarka) nie ma do nich dostępu? Dobrze rozumiem? Bo jeśli tak; to to chyba nie specjalnie jest możliwe :D No bo jakim cudem react miałby mieć dostęp do czegoś do czego przeglądarka i użytkownik nie mają; skoro React to klient.

Może chodzi Ci o to, że wewnątrz Twojego servera coś wystawia dane na portach 8082 i 8083, ale one nie są otwarte w serverze; i masz coś co i tak otwiera port 3080, i ruch jest kierowany potem do tych 8082 i 8083? Tylko skoro tak; to nadal React jest serwowany z 3080 i strzela do 3080, tak jak powinien.

0

@TomRiddle: co najmniej 3 razy już piałem, że na produkcji pomiędzy react a backend jest nodeJs.
Wklejałem nawet jak jest skonfigurowany.

const express = require('express');
const path = require('path');
const app = express(),
port = 3080;

var httpProxy = require('http-proxy');
var apiProxy = httpProxy.createProxyServer();

app.use(express.static(path.join(__dirname, '../app/build')));

var backend = 'http://localhost:8080';
app.all("/rest/*", function (req, res) {
  apiProxy.web(req, res, { target: backend });
});

app.get('/*', (req, res) => {
  res.sendFile(path.join(__dirname, '../app/build/index.html'));
});

app.listen(port, () => {
  console.log(`Server listening on the port::${port}`);
});

on teraz łapię requesty na porcie 3080 i puszcza je dalej na 8080 do backendu ...
Trochę bez sensu nam się robi ta dyskusją bo ja już zaczynam się gubić czego dotyczy wątek :D

ja chciałem tylko wiedzieć dlaczego po zbudowaniu projektu react aplikacja nie korzysta z tego "proxy": "http://localhost:8080/", :D

0
piotr_c88 napisał(a):

@TomRiddle: co najmniej 3 razy już piałem, że na produkcji pomiędzy react a backend jest nodeJs.
Wklejałem nawet jak jest skonfigurowany.

[...]

on teraz łapię requesty na porcie 3080 i puszcza je dalej na 8080 do backendu ...
Trochę bez sensu nam się robi ta dyskusją bo ja już zaczynam się gubić czego dotyczy wątek :D

No czyli jest dokładnie tak jak mówiłem, tak? React jest serwowany z tego 3080 i strzela również do 3080, tak? (Twój nodeJS odbierze request z 3080 i puści dalej do innych aplikacji na innych portach, ale React o tym nie wie, bo one mają być schowane za firewallem, tak?).

No to chyba problem się rozwiązał; bo czy nie pokazałeś w devtoolsach że Twój React strzela do :3000, a nie do :3080?

ja chciałem tylko wiedzieć dlaczego po zbudowaniu projektu react aplikacja nie korzysta z tego "proxy": "http://localhost:8080/", :D

Ale przecież mówiłeś że :8080 jest niedostęny, tak? I Node.js wystawia tylko :3080 "na świat".

piotr_c88 napisał(a):

@TomRiddle: ona zawsze strzela na strona:8081 a nodeJs dalej przekierowuje, tak to rozumiem.
Nie znam się na froncie ale naprawdę bardzo bym się zdziwił, że w przypadku gdy mam aplikacje react wystawioną na xx.xxx.xx:3080 zobaczył gdzieś w dev tols dokładny link z portem do backendu z którego react pobiera dane :)

"Z którego react pobiera dane" - nie prawda; Masz na myśli z których Twój node.js pobiera dane, tak? Twój proxy na backendzie.

Rysunek poglądowy

screenshot-20220222230814.png

Tak wygląda Twój server i aplikacja, tak?

0

@TomRiddle: cały czas nie wiem o czym jest dyskusja. Przecież to co przestawiłeś opisałem na początku w drugim swoim wątku gdzie przedstawiłem rozwiązanie jakie zastosowałem:

2022-02-16 14:38
[...]
W sumie sam sobie odpowiedziałem linkiem do artykułu który wkleiłem, że pomiędzy aplikacją React a backendem musi być jeszcze serwer proxy.
Więc utworzyłem aplikację nodejs identycznie jak w artykule, a jedynie wprowadziłem zmiany w server.js na takie

1 użytkowników online, w tym zalogowanych: 0, gości: 1