路由到SSR应用

时间:2018-02-12 12:42:56

标签: node.js reactjs express serverside-rendering

我正在使用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
};

无法理解我在这里做错了什么。

1 个答案:

答案 0 :(得分:0)

它始终呈现主页的原因是因为您有以下代码段:

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

如果将其更改为

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

在渲染功能中,它应该呈现正确的URL。

希望有所帮助。