如何使用 'after' 函数在 Pedestal 中创建拦截器
How to use 'after' function to create interceptor in Pedestal
我希望在离开阶段制作一个新的基座拦截器 运行。我希望修改上下文以将标记字符串添加到每个 html 页面的底部(用于 'site alive' 报告)。
来自Pedestal源代码here我看到这个函数:
(defn after
"Return an interceptor which calls `f` on context during the leave
stage."
([f] (interceptor {:leave f}))
([f & args]
(let [[n f args] (if (fn? f)
[nil f args]
[f (first args) (rest args)])]
(interceptor {:name (interceptor-name n)
:leave #(apply f % args)}))))
所以我需要为它提供一个函数,然后将其插入到拦截器映射中。这就说得通了。但是,当 'context' 不在范围内时,如何编写引用上下文的函数?
我想做这样的事情:
...[io.pedestal.interceptor.helpers :as h]...
(defn my-token-interceptor []
(h/after
(fn [ctx]
(assoc ctx :response {...}))))
但是'ctx'不在范围内?谢谢
after
文档对此很清楚。
(defn after
"Return an interceptor which calls `f` on context during the leave
stage."
您的 f
将收到 context
作为其第一个参数。您可以使用 f
的第一个参数在 f
中访问 context
。
下面是 f
函数的示例:token-function
,它将提供给 h/after
并且因为 h/after
returns 拦截器,我创建'my-token-interceptor' 通过调用 h/after
和 token-function
...[io.pedestal.interceptor.helpers :as h]...
(defn token-function
""
[ctx]
(assoc ctx :response {}))
(def my-token-interceptor (h/after token-function))
;; inside above token-function, ctx is pedestal `context`
尽管如此,我们不再认为 before
和 after
函数是执行此操作的最佳方式。 (io.pedestal.interceptor.helpers
中的所有函数现在都没有必要了。)
我们的建议是像 Clojure 地图文字一样编写拦截器,如下所示:
(def my-token-interceptor
{:name ::my-token-interceptor
:leave (fn [context] (assoc context :response {,,,}))})
您可以看到 after
函数没有增加任何清晰度或解释性价值。
当然,您可以在映射中使用函数值,而不是在那里创建匿名函数:
(defn- token-function
[context]
(assoc context :response {,,,}))
(def my-token-interceptor
{:name ::my-token-interceptor
:leave token-function)})
我希望在离开阶段制作一个新的基座拦截器 运行。我希望修改上下文以将标记字符串添加到每个 html 页面的底部(用于 'site alive' 报告)。
来自Pedestal源代码here我看到这个函数:
(defn after
"Return an interceptor which calls `f` on context during the leave
stage."
([f] (interceptor {:leave f}))
([f & args]
(let [[n f args] (if (fn? f)
[nil f args]
[f (first args) (rest args)])]
(interceptor {:name (interceptor-name n)
:leave #(apply f % args)}))))
所以我需要为它提供一个函数,然后将其插入到拦截器映射中。这就说得通了。但是,当 'context' 不在范围内时,如何编写引用上下文的函数?
我想做这样的事情:
...[io.pedestal.interceptor.helpers :as h]...
(defn my-token-interceptor []
(h/after
(fn [ctx]
(assoc ctx :response {...}))))
但是'ctx'不在范围内?谢谢
after
文档对此很清楚。
(defn after
"Return an interceptor which calls `f` on context during the leave
stage."
您的 f
将收到 context
作为其第一个参数。您可以使用 f
的第一个参数在 f
中访问 context
。
下面是 f
函数的示例:token-function
,它将提供给 h/after
并且因为 h/after
returns 拦截器,我创建'my-token-interceptor' 通过调用 h/after
和 token-function
...[io.pedestal.interceptor.helpers :as h]...
(defn token-function
""
[ctx]
(assoc ctx :response {}))
(def my-token-interceptor (h/after token-function))
;; inside above token-function, ctx is pedestal `context`
尽管如此,我们不再认为 before
和 after
函数是执行此操作的最佳方式。 (io.pedestal.interceptor.helpers
中的所有函数现在都没有必要了。)
我们的建议是像 Clojure 地图文字一样编写拦截器,如下所示:
(def my-token-interceptor
{:name ::my-token-interceptor
:leave (fn [context] (assoc context :response {,,,}))})
您可以看到 after
函数没有增加任何清晰度或解释性价值。
当然,您可以在映射中使用函数值,而不是在那里创建匿名函数:
(defn- token-function
[context]
(assoc context :response {,,,}))
(def my-token-interceptor
{:name ::my-token-interceptor
:leave token-function)})