У меня есть приложение Angular 7, то есть сервер поверх expressjs.
Приложение, обслуживающее часть сервера, выглядит так:
app.get('/', (req, res) => {
console.log(`sending...`);
res.sendFile(path.join(__dirname, 'index.html'));
});
Это очень просто: когда я перехожу на localhost: PORT, я получаю базовую страницу углового приложения, которая является страницей входа.
Маршрутизация Angular выглядит так:
const routes: Routes = [
{ path: '', component: LoginComponent},
{ path: 'query', component: QueryComponent, canActivate:[AuthGuard] },
{ path: '**', pathMatch:'full', redirectTo: '' }
];
Когда я работаю с Angular через ng serve
и пытаюсь перейти на любую неавторизованную страницу, например: http://localhost:4200/anyPage
или http://localhost:4200/query
, и меня перенаправляют на страницу входа или на созданный мной authGuard.
Это поведение, которое мне нужно - любой пользователь, который пытается перейти к части запроса моего приложения и не проходит authGuard, будет перенаправлен на страницу входа, а любой пользователь, который потерян и входит в странный URL будет перенаправлен обратно на базовую страницу.
Где проблема?
Когда я работаю с приложением Express, оно работает только тогда, когда я ввожу корневой URL: http://localhost:PORT
, и моя базовая страница обслуживается.
Когда я пытаюсь перейти к любому другому URL, например: http://locahost:PORT/query
или http://localhostPORT/anyPage
, я получаю ошибку GET: Cannot GET /query
.
Как сделать так, чтобы угловая маршрутизация происходила, когда я обслуживаю ее через expressjs?
Я прочитал Этот ответ, касающийся путевых маршрутов и маршрута nodejs , и я должен спросить:
Единственный способ решить мою проблему - определить authGuard для каждой страницы в angular так, чтобы nodejs / express всегда перенаправлял на базовую страницу angular, а angular должен оттуда все обрабатывать (и получать ошибки всякий раз, когда я пытаюсь перейти на любой URL, который является не определено в экспресс)?
Нет ли способа, которым часть навигации будет обрабатываться экспрессом?
Если экспресс «знает» только для перехода к базовому URL в угловом формате, то какой смысл определять маршрут в угловом формате? Когда маршрут, который я определил в угловых, вроде: path:'/query'
вступает в силу?