2014-10-10 3 views
0

저는 AngularJS에서 작동하는 Rails 백엔드 API를 보유하고 있습니다. Angular는 HTML5 pushState를 사용하도록 구성되어 있습니다. 즉, 앵글 URL은 #없이 브라우저에 나타납니다. 이 변경 사항은 사용자가 브라우저에서 URL을 복사하여 나중에 수동으로 입력 할 수 있다는 문제를 야기합니다. 즉, 사용자는 AngularJS 대신 Rails (내 맥락에서만 API 백엔드)에 의해 직접 처리됩니다.json이 아닌 모든 요청을 특정 작업으로 다시 잡는 방법은 무엇입니까?

/resources 

main#my_action 대신 resources#index로 리디렉션해야합니다 예를 들어

같은 요청합니다. 다른 핸들에

는 요청과 같은 :

여전히 resources#index에 의해 처리되어야한다

/resources.json 
.

따라서, .json으로 끝나지 않는 백엔드에 대한 모든 요청은 main#index (URL을 AngularJS에 위임해야 함)로 리디렉션되도록 요청하므로 Angular가 처리 할 수 ​​있습니다.

다른 경로 조합을 시도했지만 요청을 올바르게 리디렉션하지 못하는 것 같습니다.

# routes.rb 

constraints(format: 'json') do 

# API routes here... 

end 

get '*', to: 'main#index' 
# or.. 
get '', to: 'main#index' 

답변

0

그러나 구속 경로는 너무 복잡하지 않지만 해결 된 범위를 사용합니다.

scope format: true, constraints: {format: 'json') do 

# Api routes... 

end 

# Catch all 
get '*path', to: 'main#index' 

누군가가 예상대로 URL을 처리하기 위해 각도 얻을 것이다 메인 페이지로 JSON API 요청, 이외의 리디렉션합니다.

catch 전의 경로는 실제로 리디렉션을 우회하므로 시간이 유용 할 수 있습니다.