Получить статус 404, когда маршрут не найден.Угловой 6+ и Универсальный - PullRequest
4 голосов
/ 23 апреля 2019

Я выпустил свой проект с использованием Universal и указал в .htaccess, что все запросы должны идти в index.html (корневая страница приложения Angular)

как было задано здесь: https://angular.io/guide/universal

позволяет делиться ссылкой и открывать компонент, указанный в URL

Также создан компонент на случай, если открыт неверный маршрут: Обработка 404 с Angular2

export const routes:RouterConfig = [
  ...Routes,
  // Show the 404 page for any routes that don't exist.
  { path: '**', component: Four04Component }
];

Проблема в том, что поисковые системы рассматривают Four04Component как простую страницу со статусом 200 OK, а не страницу с ошибкой. Знаете ли вы, как можно извлечь ошибку 404 вместе с компонентом Four04Component?

1 Ответ

5 голосов
/ 24 апреля 2019

Вы должны ввести Response в ваше угловое приложение, чтобы добиться этого, сначала измените эти строки в вашем server.ts:

app.get('*', (req, res) => { //you can find these line easily
res.render('index', {
    req: req,
    res: res,
    providers: [
        {
            provide: REQUEST, useValue: (req)
        },
        {
            provide: RESPONSE, useValue: (res)
        }
    ]
    });
});

Затем в вашем Four04 компоненте введите ответ, как этот:

constructor(@Optional() @Inject(RESPONSE) private response: Response,
            @Inject(PLATFORM_ID) private platformId: Object) {}

После этого просто попробуйте что-то подобное на ngoninit Four04 компонент:

ngOnInit(){
    if(isPlatformServer(this.platformId)){
        this.response.status(404);
    }
}

Надеюсь, что это кому-нибудь поможет.

...