【问题标题】:Routing to SSR app路由到 SSR 应用程序
【发布时间】:2018-07-22 15:23:42
【问题描述】:

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

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

【问题讨论】:

    标签: node.js reactjs express server-side-rendering


    【解决方案1】:

    它总是呈现主页的原因是因为你有以下sn-p:

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

    如果你把它改成

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

    在您的渲染函数中,它应该渲染正确的 URL。

    希望对您有所帮助。

    【讨论】:

    • 不起作用 - 我在导出函数中移动了这些行。我尝试在渲染器中记录req.url 和历史记录。两者都表示 url 被点击为/。很确定我没有点击主页,而是localhost:3001/articles
    • 同时我将我的问题更新为最少的代码以更好地突出问题。
    • 我想听听你对另一件事的建议。同样的设置会为每条路径加载index.html。它首先加载该组件,然后呈现服务器的 index.html。所以在上面的这些行中一定有什么地方出错了。如果您需要更多详细信息,请告诉我。我在这里很无助!
    • 你能用新代码 sn-p 提出一个新问题吗?完成后给我打电话?
    • 其实这不是我描述的情况。服务器端路由似乎没问题,但客户端路由不同步。将发布相同的详细问题集。
    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2014-11-25
    • 1970-01-01
    相关资源
    最近更新 更多