Angular - настроить два URL для страницы индекса - PullRequest
0 голосов
/ 24 июня 2019

Моя ситуация такова, что у меня есть две части на одном сайте Angular, A User и B User. У этих двух пользователей разные стили макета, меню и т. Д. Они связаны с моим сайтом с другого сайта, поэтому я должен предоставить им два URL-адреса, например, «xxx.com/A» для пользователя «xxx.com». / B 'для пользователя B.

Я не могу использовать "{path: '', redirectTo: '/ login', pathMatch: 'full'}" в маршрутизации, потому что у меня есть две индексные / первые страницы, но если я настраиваю app-маршруты. module.ts нравится следующее:

const routes: Routes = [
  //{ path: '', redirectTo: '/login', pathMatch: 'full' },
  { path: 'login/A', component: LoginComponent},
  { path: 'login/B', component: LoginComponent}
];

Затем, когда я запускаю его на IIS, я получаю ОШИБКУ 404.

enter image description here

Я знаю, что ошибка 404 может быть связана с перезаписью URL IIS, но я не могу добавить ее на сервер. Могу ли я в любом случае определить двух разных пользователей, когда они ссылаются на мой сайт, или в любом случае заставить работать два прямых URL? Спасибо.

1 Ответ

0 голосов
/ 24 июня 2019

Я редактирую свой ответ, так что, возможно, я направлю вас в правильном направлении. Насколько я понимаю, у вас есть 2 требования.

1) Укажите, является ли пользователь UserA или UserB

2) Изменить поведение сайта в зависимости от UserA или UserB

Прежде всего, чтобы идентифицировать пользователя, мы должны передать какой-то параметр с сайта реферера. Обычно это следует делать с помощью механизма единого входа (токен и т. Д.). Но в этом случае, чтобы упростить случай с пребыванием с параметром Querystring.

Пользователь A: http://yoursite.com? User = a

Пользователь B: http://yoursite.com? User = b

Так что теперь мы можем определить, «общаемся» ли мы с Пользователем А или Пользователем Б. Отныне мы можем настроить все приложение под наши нужды:

Различные макеты, различные маршруты и т. Д.

Чтобы настроить разные маршруты в конкретных случаях использования, можно настроить разные определения маршрутов.

const standardRoutes: Routes = [
    {
    path: 'main',
    loadChildren: 'app/main/standard/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/standard'
}
]

const AUserRoutes: Routes = [
{
    path: 'main',
    loadChildren: 'app/main/a_user/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/a_user_url'
}];

const BUserRoutes: Routes = [
{
    path: 'main',
    loadChildren: 'app/main/b_user/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/b_user_url'
}];

Затем в модуле приложения для обработки разных пользователей (если необходимо определить разные маршруты - обычно требуется только в некоторых очень особых случаях)

const standardRoutes: Routes = [
    {
    path: 'main',
    loadChildren: 'app/main/standard/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/standard'
}
]

const AUserRoutes: Routes = [
{
    path: 'main',
    loadChildren: 'app/main/a_user/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/a_user_url'
}];

const BUserRoutes: Routes = [
{
    path: 'main',
    loadChildren: 'app/main/b_user/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/b_user_url'
}];

@NgModule({
    declarations: [AppComponent],
    imports: [
        BrowserModule,
        BrowserAnimationsModule,
        HttpClientModule,
        RouterModule.forRoot(standardRoutes, {
            enableTracing: false
        }),

      
    ],
    providers: [
       
    ],
    bootstrap: [AppComponent]
})
export class AppModule {
    public constructor(
        private router: Router
    ) {
        const user = router.routerState.snapshot.root.queryParams.user;
        if (user === 'a') {
            router.resetConfig(AUserRoutes);
        } else if (user === 'b') {
            router.resetConfig(BUserRoutes);
        
        }
 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...