Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
87
rated 0 times [  94] [ 7]  / answers: 1 / hits: 22350  / 7 Years ago, tue, january 31, 2017, 12:00:00

I start to use react-router in my application and I am noting that when it has a trailing slash at end of URL (/url/) it does not work. I searched more about it, read all documentation and react-router issues and tried to use <Redirect from='/*/' to=/* />, however it was not a good solution, cause it did not work too. So, reading more I found out a suggestion to insert /?at end of URL, but it still not worked.



The code of 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>
)


The code of index.js:



render((<Router history={browserHistory} routes={routes} />), document.getElementById('root'));


Searching more, I found a guy who made a function to force trailing slash at URLs and I resolved to make the opposite of that, forcing to not have it.



Update routes.js code with function No trailing slash function:



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);
}


And again this did not work! I need to make this URLs more friendly as possible and I would like that URLs do not have any trailing slash at the end. Any suggestion how can I make this? And why Redirect did not work in this case?


More From » reactjs

 Answers
14

I found a good option to make this redirect. Below is the code which I am using:



   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()
}
});


The explanation is basicly it:




  1. In this function, I verify if the URL is grand then one and if it has a trailing slash.

  2. If true, I get this URL without trailing slash and make a 301 redirect to this page without the trailing slash.

  3. Else, I jump to next method to send a value.


[#59145] Saturday, January 28, 2017, 7 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
loric

Total Points: 110
Total Questions: 96
Total Answers: 91

Location: Estonia
Member since Wed, Jun 8, 2022
2 Years ago
;