Compojure & Ring 中间件总是 Returns 404
Compojure & Ring Middleware Always Returns 404
我正在尝试在使用 compojure 和 ring 的 luminus 项目中设置一个简单的中间件。我确信我遗漏了一些简单的东西,但我已经设置了一个简单的中间件来测试,但我没有得到我期望的结果。
(defn wrap-api-auth [handler]
(if (= 2 2)
(unauthorized {:body "unauthorized"})
handler))
我希望它返回 401,但它一直返回 404。如果我更改 if 表达式 (= 2 3),路由将正确触发。作为参考,这是路线,它是 luminus 在添加中间件后生成的默认路线之一。
(GET "/plus" []
:return Long
:middleware [wrap-api-auth]
:query-params [x :- Long, {y :- Long 1}]
:summary "x+y with query-parameters. y defaults to 1."
(ok (+ x y)))
处理程序是从请求到响应的函数。
中间件是一个函数,它接受一个处理程序和 returns 另一个包装第一个处理程序的处理程序。
您的 wrap-api-auth
在您的服务启动时被调用,进行检查,如果检查 returns true
,将响应存储为处理程序,然后每个请求都会得到由恒定响应而不是处理程序处理。由于响应是一个映射,而 Clojure 中的映射可以用作函数,因此这可能不会产生有用的错误,而只会产生 returns nil
,然后将其视为 "not found"。
从示意图上看,您的包装器应该如下所示:
(defn wrap-api-auth [handler]
(fn [request]
(if (check-authorization request)
(handler request) ; pass to wrapped handler
(unauthorized …)))) ; do something else
我正在尝试在使用 compojure 和 ring 的 luminus 项目中设置一个简单的中间件。我确信我遗漏了一些简单的东西,但我已经设置了一个简单的中间件来测试,但我没有得到我期望的结果。
(defn wrap-api-auth [handler]
(if (= 2 2)
(unauthorized {:body "unauthorized"})
handler))
我希望它返回 401,但它一直返回 404。如果我更改 if 表达式 (= 2 3),路由将正确触发。作为参考,这是路线,它是 luminus 在添加中间件后生成的默认路线之一。
(GET "/plus" []
:return Long
:middleware [wrap-api-auth]
:query-params [x :- Long, {y :- Long 1}]
:summary "x+y with query-parameters. y defaults to 1."
(ok (+ x y)))
处理程序是从请求到响应的函数。
中间件是一个函数,它接受一个处理程序和 returns 另一个包装第一个处理程序的处理程序。
您的 wrap-api-auth
在您的服务启动时被调用,进行检查,如果检查 returns true
,将响应存储为处理程序,然后每个请求都会得到由恒定响应而不是处理程序处理。由于响应是一个映射,而 Clojure 中的映射可以用作函数,因此这可能不会产生有用的错误,而只会产生 returns nil
,然后将其视为 "not found"。
从示意图上看,您的包装器应该如下所示:
(defn wrap-api-auth [handler]
(fn [request]
(if (check-authorization request)
(handler request) ; pass to wrapped handler
(unauthorized …)))) ; do something else