Обслуживание производственного пакета webapp, конфликты маршрутизации - PullRequest
0 голосов
/ 05 ноября 2018

Сохраняя пакет моего приложения реагирования через сервер, созданный с помощью Hapi, он имеет два соединения, одно для API, другое для обслуживания пакета и статических ресурсов, приложение React имеет внутреннюю маршрутизацию через реагирующий маршрутизатор.

Я могу получить доступ к приложению через настроенный хост и порт, и оно работает нормально при взаимодействии через DOM, ресурсы обслуживаются и навигация перенаправляется на правильный компонент, пока я использую ссылки html приложения. Однако ввод URL-адреса, такого как / dashboard, в поле ввода URL-адреса браузера приводит к значению 404. Вероятно, вместо поиска правильного маршрута внутри приложения он начинает искать ресурс.

Как я могу переопределить это поведение, чтобы обслуживать мои активы и функциональную маршрутизацию внутри приложения?

Маршрутизация корректно работает с URL-адресом браузера при использовании сервера разработки веб-пакетов или пакета, встроенного в сервер разработки, поэтому я предполагаю, что мне что-то не хватает в конфигурации или маршрутизации сервера

Вот код сервера:

const Hapi = require('hapi'),
  Path = require('path'),
  Inert = require('inert'),
  HJWT = require('hapi-auth-jwt2'),
  Bell = require('bell'),
  Good = require('good'),
  GC = require('good-console'),
  Blipp = require('blipp'),
  APIRoutes = require('./routes/api'),
  Config = require('./config'),
  User = require('./model/user').User,
  Db = require('./db'),
  server = new Hapi.Server()

server.connection({
  host: Config.server.host,
  port: Config.server.port,
  labels: ['api'],
  routes: {
    cors: true,
    log: true
  }
})

server.connection({
  host: Config.server.host,
  port: Config.server.port - 1,
  labels: ['app'],
  routes: {
    cors: true,
    log: true
  }
})

const apiServer = server.select('api')
const appServer = server.select('app')

server.register(
  [
    {
      register: Good,
      options: {
        reporters: [
          {
            reporter: GC,
            events: {
              request: '*',
              log: '*',
              response: '*',
              error: '*'
            }
          }
        ]
      }
    },
    Blipp,
    Inert,
    HJWT,
    Bell
  ],
  { select: ['api'] },
  pluginError => {
    if (pluginError) {
      console.error('Failed to load a plugin:', pluginError)
    }

//Auth config ...   

    apiServer.route(APIRoutes.endpoints)
    appServer.route([

      {
        method: 'GET',
        path: '/{param*}',
        handler: {
          directory: {
            path: './client/dist/'
          }
        },
        config: {
          description: 'Serve client application dir',
          auth: false
        }
      }
    ])
  }
)

server.start(() => {
  console.log('Server running at:', apiServer.info.uri)
})

process.on('SIGINT', function() {
  console.log('stopping hapi server')

  server.stop({ timeout: 10000 }).then(function(err) {
    console.log('hapi server stopped')
    process.exit(err ? 1 : 0)
  })
})

Заранее спасибо,

Макс

...