Угловая навигация приложения не применяется при обслуживании приложения в expressjs - PullRequest
0 голосов
/ 09 января 2019

У меня есть приложение 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' вступает в силу?

1 Ответ

0 голосов
/ 09 января 2019

Вы должны использовать app.get('*'), чтобы направить весь запрос на index.html. Это также будет направлять статические активы, поэтому вы должны добавить app.use():

const app = express();
app.use(express.static(__dirname + '/dist'));

app.get('*', (req, res) => {
  console.log(`sending...`);
  res.sendFile(path.join(__dirname, 'index.html'));
});

app.listen(port);
...