2017-01-31 1 views
1

내 응용 프로그램에서 react-router를 사용하기 시작하고 URL 끝에 슬래시 (_ 슬릭)가 있으면 작동하지 않습니다. 나는 그것에 대해 더 많이 조사하고, 모든 문서와 반응 라우터 문제를 읽고 <Redirect from='/*/' to="/*" />을 사용하려했지만, 좋은 해결책은 아니었다. 그래서, 더 많은 것을 읽고 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')); 

더 많은 검색, 내가 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); 
} 

그리고이 작동하지 않았다! 가능한 한이 URL을 좀 더 친숙하게 만들어야하며 마지막에 끝에 오는 슬래시가 없도록하고 싶습니다. 어떤 제안이라도 어떻게 만들 수 있습니까? 그리고 왜 Redirect이이 경우에 작동하지 않았습니까?

+0

해결책을 얻었습니까? 공유 할 수 있습니까? – myDoggyWritesCode

+0

예, 있습니다! 나는 곧 나의 해결책을 게시 할 것이다. :) – Aipi

+0

위대한. :) Thanks – myDoggyWritesCode

답변

1

이 리디렉션을 만드는 좋은 방법이 있습니다.

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

설명은이 basicly입니다 : 아래는 내가 사용하고있는 코드 URL이 다음 일 그랜드 경우 내가 확인,이 기능에

  1. 는 그것이 끝에 슬래시가있는 경우.
  2. true 인 경우이 URL을 뒤에 슬래시없이 가져 와서이 페이지에 후행 슬래시없이 301 리디렉션합니다.
  3. 그렇지 않으면 값을 보내기 위해 다음 메소드로 건너 뜁니다.
+0

오, 클라이언트 측 솔루션을 기대하고있었습니다. 그러나 이것은 효과가있다. 하지만 응용 프로그램의 상태를 유지하는 방법에 대해? – myDoggyWritesCode

+1

상태는이 프로세스와 관련이 없습니다. 그것은 서버 측입니다. 따라서 귀하의 신청을 방해하지 않습니다. 슬래시없이 URL에 경로를 전달할 수 있습니다. 클라이언트가 탭하는 경우입니다. 루트에서이 작업을 수행하려면 'react-route'를 사용하고 ''와 같이 다음과 같이 만듭니다. 응용 프로그램에 오류가 발생하지 않습니다. 행운을 빕니다! – Aipi

+0

답장을 보내 주셔서 감사합니다. 당신 말이 맞아요. 하지만 제 경우에는 선언적 URL을 사용하고 있습니다. url은 사용자가 새 폴더를 만들 때 동적 인 drobox와 마찬가지로 URL에 언급되지 않을 수 있습니다. 따라서이 경우에는 작동하지 않을 수 있습니다. 그러나 나는 서버 측만이 유일한 좋은 해결책이라고 생각한다. – myDoggyWritesCode

관련 문제