【问题标题】:Handling trailing slashes in connect-history-api-fallback and Express处理 connect-history-api-fallback 和 Express 中的斜杠
【发布时间】:2020-10-13 13:59:58
【问题描述】:

我正在使用connect-history-api-fallback 处理对 React SPA 中 React Router 处理的路由(“页面”)的调用。它工作得很好,除了任何带有斜杠输入的 React Router“页面”都会失败。

https://my.app/signup - 有效。 https://my.app/signup/ - 失败。

通常,Express 将处理尾部斜杠,并在没有它的情况下提供网址(因此,您输入 https://my.app/signup/,Express 为您提供 https://my.app/signup)。这是在同一个应用程序中不使用历史连接中间件的其他路由的行为,这也是我想要的行为。

我唯一能想到的就是通过重写来处理尾部斜杠:

import history from 'connect-api-history-fallback';

// ...setup 

app.use(
  history({
    rewrites: [
      {from: /\/signup\//, to:'/signup'}
    ]
  }),
  express.static(path.join(dirname, 'some/directory'))
);

但是,这失败了。

而且它甚至不能进入我的 React 应用程序(不像只是调用一个不存在的路由,比如 https://my.app/fakeroute,它会加载没有内容的应用程序),所以这不是内部路由的问题反应。

有人知道正确的方法吗?作为一个流行的模块,我无法想象它不能处理斜杠。

【问题讨论】:

    标签: express react-router single-page-application


    【解决方案1】:

    请确保您运行的是最新版本的 connect-history-api-fallback。我刚刚对其进行了测试,它与/signup/signup/ 一起正常工作

    const express = require('express');
    const history = require('connect-history-api-fallback');
    
    const app = express();
    
    app.use(
        history({
            rewrites: [
                { from: /\/signup/, to: '/signup'}
            ]
        })
    )
    
    app.get('/signup', function(req, res) {
        res.send("signup");
    })
    
    app.listen(8080);
    

    【讨论】:

    • 感谢@MattB 的回答!在我的应用程序中,/signup 实际上是一个 React Router Route;所以没有与之对应的快速路线。 connect-history-api-fallback 成功处理对这些的导航;除非有斜线。所以我认为这个解决方案不适用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2018-06-29
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多