Маршрутизация в приложение SSR

Я использую create-реагировать-приложение и просто добавил SSR для того же.

Я только что добавил промежуточное ПО для рендеринга ToString приложения реакции.

Но я не уверен насчет маршрутизации. Должен ли он оставаться на клиенте или на экспресс (сервер). Если это на клиенте, это не работает. Каждый запрос подается на главную страницу. Совершенно справедливо по коду, который я написал. Не уверен, как его починить, чтобы он обслуживал другие страницы и сохранял те же настройки.

Код ниже

сервер /index.js

import express from 'express';
import serverRenderer from './middleware/renderer';

const PORT = 3001;
const path = require('path');
const app = express();
const router = express.Router();

router.use('^/$', serverRenderer);
app.use('/static', express.static(path.join(__dirname, 'assets')));
router.use(express.static(
    path.resolve(__dirname, '..', 'build'),
    { maxAge: '30d' },
));
router.use('*', serverRenderer);
app.use(router);

...

промежуточный слой /renderer.js

import {createMemoryHistory } from 'history';

...

const history = createMemoryHistory({
  initialEntries: ['/', '/next', '/last'],
  initialIndex: 0
});

export default (req, res, next) => {
    console.log(req.url); //logs `/` for every route
};

Не могу понять, что я здесь делаю не так.

1 ответ

Решение

Причина, по которой он всегда будет отображать домашнюю страницу, заключается в следующем:

const history = createMemoryHistory({
  initialEntries: ['/', '/next', '/last'],
  initialIndex: 0
});`

Если вы измените это на

const history = createMemoryHistory({
    initialEntries: [req.url],
    initialIndex: 0
});

внутри вашей функции рендеринга должен отображаться правильный URL.

Надеюсь, это поможет.

Другие вопросы по тегам