我正在使用create-react-app并且刚刚添加了SSR。
我刚刚为renderToString添加了一个中间件。
但我不确定路由。它应该保留在客户端还是快递(服务器)上。如果它在客户端它不工作。每个请求都被提供给主页。我写的代码相当公平。不确定如何修补它以服务其他页面仍然保持相同的设置。
代码低于
服务器/ 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
};
无法理解我在这里做错了什么。
答案 0 :(得分:0)
它始终呈现主页的原因是因为您有以下代码段:
const history = createMemoryHistory({
initialEntries: ['/', '/next', '/last'],
initialIndex: 0
});`
如果将其更改为
const history = createMemoryHistory({
initialEntries: [req.url],
initialIndex: 0
});
在渲染功能中,它应该呈现正确的URL。
希望有所帮助。