Как разместить приложение Reaction-JS с Хапи?

Я сделал приложение Reaction-JS с React-маршрутизатором. Я настроил свое веб-приложение с этими конечными точками:

/home
/user/:id

Все работает отлично, пока я не попытаюсь разместить его на ec2 экземпляре с помощью Hapi.

Сначала я нашел этот учебник, https://medium.com/@tribou/serving-react-and-flux-with-hapi-and-webpack-213afacf94ea но, похоже, он просто генерирует статические html-страницы для каждого запроса и весь компонент состояния потеряны.

Затем я нашел этот, https://medium.com/@notrab/using-create-react-app-with-hapi-js-8f4ef3dcd311, он упаковывает все в build / только с одним файлом ввода, index.html. Тогда мне нужно вручную перенаправить /user/:id в build/index.html?

1 ответ

Для начала вам нужен инертный плагин, зарегистрируйтесь в вашем приложении.

Это мой код контроллера для / конечной точки:

exports.dashboard = {
    auth: false,
    description: 'main request handler',
    handler: async (request, h) => {
        return h.file('/PATH_TO_MY_BUILD_FOLDER/index.html', {confine: false});
    }
};

Только это, он разрывает index.html с моего диска.

Вам нужно обрабатывать / static / css / и /static/js/ folder, потому что index.html содержит ссылки на эти папки, я обработал с помощью nginx, вы можете использовать инертный плагин, конечно, но nginx, если вы спросите меня, вот конфигурация nginx файл для этого

server {
    listen 80;    
    server_name domain.com;
    root   /home/ubuntu/myapp/build;

  # handle static files in build folder
  location ~ ^/static/(.*)$ {
      alias /home/ubuntu/myapp/build/static/$1;
  }

  location / {        
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://localhost:3000;
        proxy_pass_header Server;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_redirect off;
  }
}

Это все.

Поместите этот / handler в конец конфигурации вашего маршрута, обработайте маршрут /user/:id задолго до основного / маршрута.

Опять же, вот конфиг маршрута для вас:

server.route([
    {
        method: 'GET',
        path: '/user/:id',
        options: Controller.userDetail
    },
    {
        method: 'POST',
        path: '/user',
        options: Controller.createUser
    },        
    {
        method: 'GET',
        path: '/',
        config: Controller.dashboard
    },
    {
        method: 'GET',
        path: '/{param*}',
        config: Controller.dashboard
    },
]);
Другие вопросы по тегам