2012-10-10 4 views
2

프런트 엔드와 백 엔드를 분리해야합니다. 나는 프론트 엔드를 위해 백엔드와 백본에 레일즈를 사용하고 있습니다.백본, 레일, 크로스 도메인 및 프런트 엔드/백 엔드 디커플링?

몇 번의 시행 착오 끝에 서버에서 CORS를 설정할 수있었습니다. 이 모듈에 대한 모든 감사 :

https://github.com/yaoweibin/nginx_cross_origin_module

는 지금은 크로스 도메인이 상자 밖으로 호출을 지원하지 않는 백본을 발견했다.

백본에서 백엔드를 분리하는 가장 좋은 방법은 무엇일까요?

나는 두 가지 솔루션을 참조하십시오 백본 모델

1) 쓰기 경로/서버를 가리 킵니다 컬렉션을, 그래서 예를 들어 얻을 것이다 :

class App.Collections.Plots extends Backbone.Collection 
    model: App.Models.Plot 
    url: 'http://www.app.com/api/plots' 

이 내가 가진 것을 의미합니다 교차 도메인을 지원하는 백본 (backbone) 방법을 패치 할 수도 있습니다.

2) 백 엔드가 서버에 도메인 간 호출을하지 않고 레일스를 프론트 엔드 파트의 레일 측에 설치하십시오. 백본이 디커플링을보다 쉽게 ​​만들어야하기 때문에 이상하게 보입니다. 이제는 레일스 솔루션으로 돌아갈 수있을 것입니다.

답변

2

이제 Backbone이 도메인 간 호출을 지원하지 않는다는 사실을 알았습니다.

Backbone.js "크로스 도메인 지원". 사실 백본에만 국한되지 않습니다 .js는 브라우저를 지원하는 역할을합니다. CORS 호환 브라우저에서 각 요청 (POST, GET) 앞에 OPTIONS 요청이 오면 서버가 해당 POST 또는 GET 요청을 권한 부여하는지 확인합니다.

레일 애플리케이션에서이 새로운 호출에 응답하면됩니다. 이 위대한 게시물에서

class ApplicationController < ActionController::Base 
    before_filter :cors_preflight_check 
    after_filter :cors_set_access_control_headers 

    # For all responses in this controller, return the CORS access control headers. 
    def cors_set_access_control_headers 
    headers['Access-Control-Allow-Origin'] = '*' 
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS' 
    headers['Access-Control-Max-Age'] = "1728000" 
    end 

    # If this is a preflight OPTIONS request, then short-circuit the 
    # request, return only the necessary headers and return an empty 
    # text/plain. 
    def cors_preflight_check 
    if request.method == :options 
     headers['Access-Control-Allow-Origin'] = '*' 
     headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS' 
     headers['Access-Control-Allow-Headers'] = 'X-Requested-With, X-Prototype-Version' 
     headers['Access-Control-Max-Age'] = '1728000' 
     render :text => '', :content_type => 'text/plain' 
    end 
    end 

end 

코드 : : 예를 들어

그래서 만약 당신의 Nginx에 플러그인이 잘 작동 http://www.tsheffler.com/blog/?p=428 당신은 확인해야합니다. Access-Control-Allow-Origin 헤더에 자바 스크립트가 실행되는 도메인이 포함되어 있는지 확인하십시오.