Сохраняя пакет моего приложения реагирования через сервер, созданный с помощью 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)
})
})
Заранее спасибо,
Макс