Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何在compojure with Liberator中处理一些但不是所有的http方法?_Clojure_Compojure_Liberator - Fatal编程技术网

Clojure 如何在compojure with Liberator中处理一些但不是所有的http方法?

Clojure 如何在compojure with Liberator中处理一些但不是所有的http方法?,clojure,compojure,liberator,Clojure,Compojure,Liberator,我正在将liberator与compojure一起使用,并希望向save资源发送多个方法(但不是所有方法)。我不想重复我自己的话,我希望有一个可以同时定义多个处理程序的东西 例如: (defroutes abc (GET "/x" [] my-func) (HEAD "/x" [] my-func) (OPTIONS "/x" [] my-func)) 应更接近: (defroutes abc (GET-HEAD-OPTIONS "/x" [] my-func)) 在几次错

我正在将liberator与compojure一起使用,并希望向save资源发送多个方法(但不是所有方法)。我不想重复我自己的话,我希望有一个可以同时定义多个处理程序的东西

例如:

(defroutes abc 
  (GET "/x" [] my-func)
  (HEAD "/x" [] my-func)
  (OPTIONS "/x" [] my-func))
应更接近:

(defroutes abc
  (GET-HEAD-OPTIONS "/x" [] my-func))

在几次错误启动之后,我意识到compojure.core/context宏可以用于此目的。我定义了以下宏:

(defmacro read-only "Generate a route that matches HEAD, GET, or OPTIONS"
  [path args & body]
  `(context "" []
        (GET ~path ~args ~@body)
        (HEAD ~path ~args ~@body)
        (OPTIONS ~path ~args ~@body)))
这将让你做到:

(read-only "/x" [] my-func)

而且似乎做了我需要的。

在几次错误的开始之后,我意识到compojure.core/context宏可以用于此目的。我定义了以下宏:

(defmacro read-only "Generate a route that matches HEAD, GET, or OPTIONS"
  [path args & body]
  `(context "" []
        (GET ~path ~args ~@body)
        (HEAD ~path ~args ~@body)
        (OPTIONS ~path ~args ~@body)))
这将让你做到:

(read-only "/x" [] my-func)

而且似乎做了我需要的。

在几次错误的开始之后,我意识到compojure.core/context宏可以用于此目的。我定义了以下宏:

(defmacro read-only "Generate a route that matches HEAD, GET, or OPTIONS"
  [path args & body]
  `(context "" []
        (GET ~path ~args ~@body)
        (HEAD ~path ~args ~@body)
        (OPTIONS ~path ~args ~@body)))
这将让你做到:

(read-only "/x" [] my-func)

而且似乎做了我需要的。

在几次错误的开始之后,我意识到compojure.core/context宏可以用于此目的。我定义了以下宏:

(defmacro read-only "Generate a route that matches HEAD, GET, or OPTIONS"
  [path args & body]
  `(context "" []
        (GET ~path ~args ~@body)
        (HEAD ~path ~args ~@body)
        (OPTIONS ~path ~args ~@body)))
这将让你做到:

(read-only "/x" [] my-func)
并且似乎做了我需要的。

如图所示,惯用的方法是使用路由上的
任意
键,然后在资源上定义
:允许的方法[:get:head:options]
。您需要实现
:handle ok
:handle选项

(defroute collection-example
    (ANY ["/collection/:id" #".*"] [id] (entry-resource id))
    (ANY "/collection" [] list-resource))


(defresource list-resource
  :available-media-types ["application/json"]
  :allowed-methods [:get :post]
  :known-content-type? #(check-content-type % ["application/json"])
  :malformed? #(parse-json % ::data)
  :handle-ok #(map (fn [id] (str (build-entry-url (get % :request) id)))
                   (keys @entries)))
如图所示,惯用的方法是在路由上使用
ANY
键,然后在资源上定义
:允许的方法[:get:head:options]
。您需要实现
:handle ok
:handle选项

(defroute collection-example
    (ANY ["/collection/:id" #".*"] [id] (entry-resource id))
    (ANY "/collection" [] list-resource))


(defresource list-resource
  :available-media-types ["application/json"]
  :allowed-methods [:get :post]
  :known-content-type? #(check-content-type % ["application/json"])
  :malformed? #(parse-json % ::data)
  :handle-ok #(map (fn [id] (str (build-entry-url (get % :request) id)))
                   (keys @entries)))
如图所示,惯用的方法是在路由上使用
ANY
键,然后在资源上定义
:允许的方法[:get:head:options]
。您需要实现
:handle ok
:handle选项

(defroute collection-example
    (ANY ["/collection/:id" #".*"] [id] (entry-resource id))
    (ANY "/collection" [] list-resource))


(defresource list-resource
  :available-media-types ["application/json"]
  :allowed-methods [:get :post]
  :known-content-type? #(check-content-type % ["application/json"])
  :malformed? #(parse-json % ::data)
  :handle-ok #(map (fn [id] (str (build-entry-url (get % :request) id)))
                   (keys @entries)))
如图所示,惯用的方法是在路由上使用
ANY
键,然后在资源上定义
:允许的方法[:get:head:options]
。您需要实现
:handle ok
:handle选项

(defroute collection-example
    (ANY ["/collection/:id" #".*"] [id] (entry-resource id))
    (ANY "/collection" [] list-resource))


(defresource list-resource
  :available-media-types ["application/json"]
  :allowed-methods [:get :post]
  :known-content-type? #(check-content-type % ["application/json"])
  :malformed? #(parse-json % ::data)
  :handle-ok #(map (fn [id] (str (build-entry-url (get % :request) id)))
                   (keys @entries)))


我看到了这一点,但这似乎排除了在另一个资源中处理其他方法,因为它们将被路由到该资源,被允许的方法过滤器回击。我也不希望资源中的大多数决策函数(比如畸形?)必须检查正在使用的HTTP方法。我会尝试用一个更完整的例子来更新我的问题。我明白你的意思,在这种情况下,你自己的答案似乎已经足够好了。如果您有进一步的需要,另一种选择是使用公共基础资源的继承。我期待着在邮件列表上看到的公共资源配置。我认为这也会起作用。谢谢这是定义基本资源的一个很好的灵感来源,也是一个很好的约定,感谢我看到了这一点,但这似乎排除了在另一个资源中处理其他方法,因为它们将被路由到资源,被允许的方法过滤器回击。我也不希望资源中的大多数决策函数(比如畸形?)必须检查正在使用的HTTP方法。我会尝试用一个更完整的例子来更新我的问题。我明白你的意思,在这种情况下,你自己的答案似乎已经足够好了。如果您有进一步的需要,另一种选择是使用公共基础资源的继承。我期待着在邮件列表上看到的公共资源配置。我认为这也会起作用。谢谢这是定义基本资源的一个很好的灵感来源,也是一个很好的约定,感谢我看到了这一点,但这似乎排除了在另一个资源中处理其他方法,因为它们将被路由到资源,被允许的方法过滤器回击。我也不希望资源中的大多数决策函数(比如畸形?)必须检查正在使用的HTTP方法。我会尝试用一个更完整的例子来更新我的问题。我明白你的意思,在这种情况下,你自己的答案似乎已经足够好了。如果您有进一步的需要,另一种选择是使用公共基础资源的继承。我期待着在邮件列表上看到的公共资源配置。我认为这也会起作用。谢谢这是定义基本资源的一个很好的灵感来源,也是一个很好的约定,感谢我看到了这一点,但这似乎排除了在另一个资源中处理其他方法,因为它们将被路由到资源,被允许的方法过滤器回击。我也不希望资源中的大多数决策函数(比如畸形?)必须检查正在使用的HTTP方法。我会尝试用一个更完整的例子来更新我的问题。我明白你的意思,在这种情况下,你自己的答案似乎已经足够好了。如果您有进一步的需要,另一种选择是使用公共基础资源的继承。我期待着在邮件列表上看到的公共资源配置。我认为这也会起作用。谢谢这是定义基本资源的一个很好的灵感来源,也是一个很好的约定,这对于我的特定用例来说效果更好,但是James的代码和注释显示了一个很好的方法来处理它,如果它对您有效的话。这对于我的特定用例来说效果更好,但是James的代码和注释显示了一个很好的方法来处理它,如果它对您有效。这对我的特定用例更有效,但是James的代码和注释显示了一个很好的方法来处理它,如果它对您有效。这对我的特定用例更有效,但是James的代码和注释显示了一个很好的方法来处理它。