Angular / Clojure 앱으로 cors 문제를 극복하기 위해 노력하고 있으며 POST 및 GET 요청에 대한 Access-Control-Allow-Origin 오류를 방지하기 위해 사용할 구문을 이해하는 데 문제가 있습니다.
이 코드를 내 경로가있는 내 clojure 컨트롤러에 추가했으며 GET 요청에 대한 문제를 해결하는 것 같습니다.
(POST "/node/create" request
(let [node_object (or (get-in request [:params :data])
(get-in request [:body :data])
"ROUTER_ERROR")]
{:status 200
:headers {"Content-Type" "application/json"}
:body (recursiftion.model/createNode node_object)
}
))
(defn allow-cross-origin
"middleware function to allow crosss origin"
[handler]
(fn [request]
(let [response (handler request)]
(assoc-in response [:headers "Access-Control-Allow-Origin"]
"*"))))
(def app
(-> (handler/api app-routes)
(middleware/wrap-json-body {:keywords? true})
(middleware/wrap-json-response)
(allow-cross-origin)))
그리고이 Angular 코드
this.post = function (object) {
console.log('BANG', object);
return $http({
method: "post",
url: "https://mywebserveraddress.com/node/create",
data: object
});
};
하지만 여전히 POST 요청에 대한 관련 오류가 있습니다.
preflight has invalid HTTP status code 404
내 프로덕션 환경의 개발 및 외부 서버를 위해 로컬 호스트에 상주 할 앵귤러 스파에서 교차 도메인 아약스 요청을 만들기 위해 내 clojure 애플리케이션에 추가 할 올바른 구문을 찾고 있습니다.
도와 주셔서 감사합니다.
CORS GET
는 OPTIONS
메서드를 사용하여 소위 "프리 플라이트"요청을 보내기 위해 비 요청을 요구합니다 . 에 대한 처리기가 없기 때문에 코드가 404를 반환합니다 (OPTIONS "/node/create" ...)
.
더 좋지만 여전히 완전하지는 않습니다. CORS 미들웨어는 다음과 같은 모양이됩니다.
(def ^:private cors-headers
{"access-control-..." ...})
(defn wrap-cors
[handler]
(fn [request]
(some-> (if (= (:request-method request) :options)
{:status 200}
(handler request))
(update :headers merge cors-headers))))
그러나 더 복잡한 점이 있습니다 ( 일부 경우 *
유효한 값이 Access-Control-Allow-Origin
아님). 따라서 기존 라이브러리 (예 : ring-cors
또는 ring.middleware.cors
)를 사용하여 처리하는 것이 좋습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다