Angular 6+ Universal только для предварительной загрузки определенных маршрутов - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть приложение Angular 7 с настройкой Angular Universal (экспресс).Я также использую Angular Routing.Я пытаюсь настроить его так, чтобы только мои предварительные маршруты входа в систему (маркетинговые представления) отображались на стороне сервера, а все, что после входа загружалось через традиционную угловую загрузку на стороне клиента.

У меня это работает, если пользователь перемещается посайт, использующий router.navigate или [routerLink], однако, если пользователь щелкает браузер, обновляет его, он взрывается из-за зависимостей браузера для файлов cookie и локального хранилища на определенных маршрутах.

Желаемый результат - если пользователь перемещается напрямую илиобновляется на маршруте, который исключен из SSR, загружается так, как если бы Angular Universal там не было.Если маршрут, который я назначил для SSR, переходит к нему, он отображает серверную сторону.

в моем server.ts у меня есть эта строка, которая использует Universal для всех маршрутов.

app.get('*', (req, res) => { res.render(join(DIST_FOLDER, 'browser', 'index.html'), { req }); });

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

1 Ответ

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

Вы можете сделать это с помощью правил экспресс-маршрутизации.

Измените промежуточное программное обеспечение, выполняющее рендеринг на стороне сервера, для проверки «разрешенных» маршрутов ssr, а затем добавьте универсальный после него.Может выглядеть примерно так

// Server-Side Rendering catch call
app.get('*', (req, res, next) => {
    if (['/campaign', '/', '/any/other/page'].indexOf(req.originalUrl) < 0) {
        return next(); // continue path matching
    }
    renderModuleFactory(
       ... your existing SSR implementation
});

// Catch-all to return normal client-side rendered app
app.get('*', (req, res) => {
    return res.sendFile(path.join(APP_CONFIG.client_root, './index.html'));
});
...