Angular POST 到 Clojure Ring receivesResponse for preflight 具有无效的 HTTP 状态代码 404
Angular POST to Clojure Ring receivesResponse for preflight has invalid HTTP status code 404
我正在努力克服我的 Angular / Clojure 应用程序的 cors 问题,但我无法理解要使用什么语法来避免 [=31= 的 Access-Control-Allow-Origin 错误] 和 GET 请求
我已将这段代码添加到我的 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 应用程序中,以便我从我的 angular spa 发出跨域 ajax 请求,这些请求将在本地主机上用于开发和外部服务器来自我的生产环境。
非常感谢您的帮助。
CORS 要求非GET
请求使用OPTIONS
方法发送所谓的"preflight" 请求。您的代码 returns 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
or ring.middleware.cors
,照顾他们。
我正在努力克服我的 Angular / Clojure 应用程序的 cors 问题,但我无法理解要使用什么语法来避免 [=31= 的 Access-Control-Allow-Origin 错误] 和 GET 请求
我已将这段代码添加到我的 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 应用程序中,以便我从我的 angular spa 发出跨域 ajax 请求,这些请求将在本地主机上用于开发和外部服务器来自我的生产环境。
非常感谢您的帮助。
CORS 要求非GET
请求使用OPTIONS
方法发送所谓的"preflight" 请求。您的代码 returns 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
or ring.middleware.cors
,照顾他们。