gpt4 book ai didi

Clojure compojure 中间件和箭头语法

转载 作者:行者123 更新时间:2023-12-02 15:32:22 33 4
gpt4 key购买 nike

我正在尝试理解 compojure 中间件:

以下代码来自compojure template :

(def app
(wrap-defaults app-routes site-defaults))

它相当于下面的吗?

(def app
(-> app-routes
(wrap-defaults api-defaults)))

我对此不确定,因为在以下代码中 my-middleware2my-middleware1 之前调用

(def app
(-> api-routes
(wrap-defaults api-defaults)
(my-middleware1)
(my-middleware2)))

最佳答案

你是对的:

(def app
(wrap-defaults app-routes site-defaults))

相当于:

(def app
(-> app-routes
(wrap-defaults api-defaults)))

该箭头称为 Thread-First Macro并允许您以线性方式编写嵌套的 s 表达式。

在第二个示例中,当 HTTP 请求传入时,在 my-middleware1 之前调用 my-middleware2 是有意义的。您正在创建一个 Ring Handler ,不直接调用中间件。

(def app
(-> api-routes
(wrap-defaults api-defaults)
my-middleware1
my-middleware2))

扩展为:

(def app
(my-middleware2 (my-middleware1 (wrap-defaults app-routes api-defaults))))

当 HTTP 请求传入时,my-middleware2 首先处理它,对其执行某些操作(即提取 session 数据),然后将其传递给下一个中间件,直到其中一个中间件返回HTTP 响应。

注意:我从 (my-middleware1)(my-middleware2) 中取出了括号。当这样使用时,这意味着 my-middlware1 是一个函数,当不带参数调用时,返回一个中间件函数。这可能是您想要的,但并不常见。

关于Clojure compojure 中间件和箭头语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893719/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com