如何在compojure-api处理程序中访问会话?

时间:2015-10-13 15:50:44

标签: clojure compojure-api

使用compojure-api,如:

(defapi app
  (swagger-ui)
  (swagger-docs 
    {:info {:title "Sample api"}})

  (GET* "/" []
    :no-doc true
    (ok "hello world"))

  (context* "/api" []
    :tags ["thingie"]

    (GET* "/plus" []
      :return       Long
      :query-params [x :- Long, {y :- Long 1}]
      :summary      "x+y with query-parameters. y defaults to 1."
      (ok (+ x y)))))

如何访问响铃会话?

1 个答案:

答案 0 :(得分:0)

基于此处的文档:https://github.com/metosin/compojure-api/blob/master/src/compojure/api/core.clj,defapi是以下宏:

(defmacro defapi
  [name & body]
  `(def ~name
     (api ~@body)))

你可以看到它只是用api宏调用的结果来定义var(而api创建一个环处理程序)

所以你可以在没有defapi的情况下使用它,然后换环会话:

(def app
  (-> (api (swagger-ui)
           (swagger-docs 
             {:info {:title "Sample api"}})

           (GET* "/" []
             :no-doc true
             (ok "hello world"))

           (context* "/api" []
             :tags ["thingie"]

           (GET* "/plus" []
             :return       Long
             :query-params [x :- Long, {y :- Long 1}]
             :summary      "x+y with query-parameters. y defaults to 1."
             (ok (+ x y))
      ring.middleware.session/wrap-session))

我想在那之后您应该能够正常使用会话,如https://github.com/ring-clojure/ring/wiki/Sessions中所述。 Haven不会测试它,但我认为这是正确的方式