Хостинг React FrontEnd и NodeJs Backend на одном сервере - PullRequest
0 голосов
/ 16 октября 2019

Я создал полнофункциональное приложение с внешним интерфейсом из React и server.js, написанным на nodejs(Express), и я использую Postgres в качестве базы данных. Я делал это раньше и размещаю свой сайт на Heroku.

Разница в том, что в Heroku мой интерфейс и бэкэнд были разделены на отдельные URL-адреса, так что в моем приложении реагирования я мог сделать

fetch('http://localhost:3005/url',{
    method: 'get',
    headers: {'Content-Type': 'application/json'},
})
.then(response => response.json())

Приведенный выше код выполняется во время выполнения моей реакции иузел на моем ноутбуке через npm start.

Мой server.js будет

app.get('/url', (req, res) => {
    db.insert({
       page_url: req.body.urlInfo,
       user_visit_id: req.body.visitID,
    })
    .into('pageurl')
    .then((id) => {
        res.json(id);
    }).catch(err => res.status(400).json('unable to write'))
})

В Heroku я просто изменил бы строку React внешнего интерфейса на:

fetch('http://**Ther  URL where my server.js is**/url',{
    method: 'get',
    headers: {'Content-Type': 'application/json'},
})
.then(response => response.json())

Иэто будет работать абсолютно нормально. Проблема возникает сейчас, когда я должен развернуть приложение на школьном сервере. На сервере работает nginx, и я получил домен для этого проекта.

Внешний интерфейс размещается на nginx, и всякий раз, когда я посещаю свой домен, появляется внешний интерфейс, но как мне подключить его к моим конечным точкам server.js, если мне нужно, чтобы файл server.js находился на том же сервере, что иприложение реагирования, которое размещено на nginx. Я совершенно новичок в nginx и не имею конкретного представления о решении проблемы. У меня есть узел server.js, работающий на сервере с использованием pm2.

Но это сейчас мало пользы, так как моя выборка веб-интерфейса выполняет localhost: 3005 / url, который ищет точку URL-адреса в порту 3005 устройства, которое посещает домен, а не фактический сервер, на котором размещаетсявнешний интерфейс и узел server.js.

Я также пытался заменить localhost:3005/url из server.js на IP-адрес сервера, но этот адрес, по-видимому, доступен для посещения только при подключении к Wi-Fi в школе.

Если я изменяювведите этот IP-адрес с моего телефона с подключением для передачи данных, адрес не может быть достигнут. Итак, я предположил, что "ipaddress:3005/url" также не правильный способ сделать это. Я заблудился на этом этапе, и любые sugesstions были бы большой помощью !!! В идеале я хотел бы запустить мой веб-интерфейс на nginx на сервере и запустить pm2 server.js.

Мне просто нужен способ соединения конечных точек внешнего интерфейса и внутреннего интерфейса. Мне нужен URL

, где мой server.js является частью

fetch ('http://Ther URL, где мой server.js / url', {method:'get', headers: {'Content-Type': 'application / json'},}) .then (response => response.json ())

Мой файл конфигурации nginx сейчас выглядитвот так:

server {
    listen 80;
    listen [::]:80;

    root /var/www/example.com/html/build;
    index index.html index.php index.htm index.nginx-debian.html;
    server_name example.com www.example.com;

    location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       # With php-fpm (or other unix sockets):
       fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
       # With php-cgi (or other tcp sockets):
       # fastcgi_pass 127.0.0.1:9000;
    }


    location / {
    try_files $uri /index.html;
    #try_files $uri $uri/ =404;
    }
}

Эта конфигурация nginx в данный момент обслуживает только внешний интерфейс. Кроме того, реальный домен.com заменяется на example.com в приведенном выше коде.

Спасибо!

...