Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除路由器URL中的尾部斜杠_Javascript_Reactjs_React Router - Fatal编程技术网

Javascript 如何删除路由器URL中的尾部斜杠

Javascript 如何删除路由器URL中的尾部斜杠,javascript,reactjs,react-router,Javascript,Reactjs,React Router,我开始在我的应用程序中使用react router,我注意到当它在URL的末尾有一个尾随斜杠(/URL/)时,它不起作用。我搜索了更多关于它的信息,阅读了所有文档并对路由器问题做出了反应,并尝试使用,但这不是一个好的解决方案,因为它也不起作用。所以,在阅读更多内容后,我发现了一个建议,在URL的末尾插入/?,但它仍然不起作用 routes.js的代码: export default ( <Route path="/" component={App}> <

我开始在我的应用程序中使用react router,我注意到当它在URL的末尾有一个尾随斜杠(
/URL/
)时,它不起作用。我搜索了更多关于它的信息,阅读了所有文档并对路由器问题做出了反应,并尝试使用
,但这不是一个好的解决方案,因为它也不起作用。所以,在阅读更多内容后,我发现了一个建议,在URL的末尾插入
/?
,但它仍然不起作用

routes.js的代码:

export default (
    <Route path="/" component={App}>
        <IndexRoute component={ProfileFillComponents} />
        <Route path="/seguro-residencia" handler={require('./components/Forms/Residencial/ProfileFill/profileFillComponents')} />
        <Route path="/seguro-residencia/informacoes-pessoais" component={CotationNumber} />
    </Route>
)
导出默认值(
)
index.js的代码:

render((<Router history={browserHistory} routes={routes} />), document.getElementById('root'));
render((),document.getElementById('root');
在搜索更多内容时,我发现一个家伙制作了一个函数,在URL上强制使用尾随斜杠,我决定使用相反的方法,强制不使用它

更新routes.js代码时不使用尾随斜杠函数:

export default (
    <Route onEnter={forceTrailingSlash} onChange={forceTrailingSlashOnChange}>
        <Route path="/" component={App}>
            <IndexRoute component={ProfileFillComponents} />
            <Route path="/seguro-residencia" handler={require('./components/Forms/Residencial/ProfileFill/profileFillComponents')} />
            <Route path="/seguro-residencia/informacoes-pessoais" component={CotationNumber} />
        </Route>
    </Route>
)

function forceNoTrailingSlash(nextState, replace) {
  const path = nextState.location.pathname;
  if (path.slice(-1) === '/') {
    replace({
      ...nextState.location,
      pathname: path.slice(1,path.lastIndexOf('/')-1)
    });
  }
}    

function forceNoTrailingSlashOnChange(prevState, nextState, replace) {
  forceNoTrailingSlash(nextState, replace);
}
导出默认值(
)
功能强制导轨间隙(下一状态,更换){
const path=nextState.location.pathname;
if(path.slice(-1)='/')){
替换({
…nextState.location,
路径名:path.slice(1,path.lastIndexOf('/')-1)
});
}
}    
功能forceNoTrailingSlashOnChange(上一状态、下一状态、替换){
强制导轨间隙(下一状态,更换);
}

这同样不起作用!我需要尽可能使这个URL更友好,我希望URL结尾没有任何尾随斜杠。有什么建议我该怎么做?为什么
重定向在这种情况下不起作用?

我找到了一个很好的选择来进行重定向。以下是我正在使用的代码:

   app.use(function(req, res, next) {
      if (req.path.length > 1 && /\/$/.test(req.path)) {
        var query = req.url.slice(req.path.length)
        res.redirect(301, req.path.slice(0, -1) + query)
      } else {
        next()
      }
    });
基本的解释是:

  • 在这个函数中,我验证URL是否是grand,然后是one,以及是否有一个尾随斜杠
  • 如果为true,我得到这个URL而不带尾随斜杠,并将301重定向到这个页面而不带尾随斜杠
  • 否则,我跳转到下一个方法发送一个值

  • 你找到解决办法了吗?你能分享吗?是的,我有!我将很快发布我的解决方案。:)@user3241111我已经发布了!Tks@user3241111,你看到了吗?哦,我在期待一些客户端解决方案。但这应该行得通。但是,如何维护应用程序的状态呢?该状态不参与此过程。它是服务器端的。因此,它不会干扰您的应用程序。您可以将其路由传递到URL,而不使用尾随斜杠。下面是客户端点击的示例。要在路由中执行此操作,您可以使用“react route”并执行如下操作:
    ,而不使用尾部斜杠。它不会对您的应用程序造成任何错误。祝你好运谢谢你的回复。你说得对。但在我的例子中,我使用的是声明性URL,URL中可能没有提到URL(就像drobox中,URL是动态的,每个用户创建一个新文件夹)。因此,在这种情况下,它可能不起作用。但我想,服务器端是唯一好的解决方案。