angular универсальный - добавление дополнительного слэба sh на URL - PullRequest
0 голосов
/ 13 февраля 2020

мы используем angular 8 как универсальный ssr и prerender. Ниже кода, когда я использую prerender с expressjs, но по какой-то причине после того, как страница предварительно отображается, URL добавляет в конце дополнительный sla sh, что делает страницу не индексируемой, затем angular перенаправляет javascript на нужную страницу.

angular страница универсального предварительного отображения сделает URL похожим на

https://www.mywebsite.com/home/

затем перенаправляет

https://www.mywebsite.com/home

первый URL-адрес с пререндированным

Есть идеи, почему? и что мне нужно, чтобы это исправить?

      import 'zone.js/dist/zone-node';
      import 'reflect-metadata';
      import {readFileSync, writeFileSync, existsSync, mkdirSync} from 'fs';
      import {join} from 'path';

      import {enableProdMode} from '@angular/core';
      // Faster server renders w/ Prod mode (dev mode never needed)
      enableProdMode();

      // Import module map for lazy loading
      import {provideModuleMap} from '@nguniversal/module-map-ngfactory-loader';
      import {renderModuleFactory} from '@angular/platform-server';
      import { ROUTESStaticPages } from './prerender-static-pages';


      // * NOTE :: leave this as require() since this file is built Dynamically from webpack
      const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main');

      const BROWSER_FOLDER = join(process.cwd(), 'project');

      // Load the index.html file containing referances to your application bundle.
      const index = readFileSync(join('project', 'index.html'), 'utf8');

      let previousRender = Promise.resolve();

      // Iterate each route path
      ROUTESStaticPages.forEach(route => {
        const fullPath = join(BROWSER_FOLDER, route);

        // Make sure the directory structure is there
        if (!existsSync(fullPath)) {
          mkdirSync(fullPath);
        }

        // Writes rendered HTML to index.html, replacing the file if it already exists.
        previousRender = previousRender.then(_ => renderModuleFactory(AppServerModuleNgFactory, {
          document: index,
          url: route,
          extraProviders: [
            provideModuleMap(LAZY_MODULE_MAP),
            { provide: 'APP_BASE_URL', useFactory: () => '123124531254', deps: [] },
            { provide: 'APP_REQ_HEADERS', useFactory: () => JSON.stringify('94384239572'), deps: []},
          ]
        })).then(html => writeFileSync(join(fullPath, 'index.html'), html));
      });

и в ROUTESStaticPages URL-адреса перечислены так:

      export const ROUTESStaticPages = [
          '/',
          '/home',
          '/login',
          '/login/createlogin',
          '/login/resetpassword',
          '/pages',
          '/pages/about-us',

        ];

enter image description here

enter image description here

1 Ответ

0 голосов
/ 04 марта 2020

У меня была такая же проблема в моем универсальном предварительном просмотре, по умолчанию перенаправление равно true на expressjs Конфигурация, которую я изменил на false, теперь не перенаправляет долго, express config router

app.use(express.static(join(DIST_FOLDER, 'browser'), { maxAge: '1y', redirect: false }));

app.get('*.*', express.static(join(DIST_FOLDER, 'browser'), {
  maxAge: '1y',
  redirect: false
}));
...