我想获取一个获取的html页面并从中创建一个活跃的模板
(-> (fetch) ; function returns clj-http.client/get
(:body)
(clojure.java.io/reader)
(html/html-resource) ; enlive
(swap-header)
(swap-body-tag))
我的两个交换fns看起来像这样
(defn swap-header [body]
(as-> (html/deftemplate temp body [content] [:body] (html/content content)) x
(apply str (x "testing"))))
(defn swap-body-tag [body]
(as-> (html/deftemplate temp body [disabled] [:body] (html/set-attr :disabled disabled)) x
(apply str (x "yo-123"))))
所以困境是我可以从fetch返回管道注释掉这两个交换中的任何一个并且它工作正常。试图(以任何顺序)给出失败。我相信应用模板的结果是错误的格式,可以从中制作另一个模板,但不能完全达到我需要的位置。
我链接它时得到的错误是HTML resource not found.
编辑使用更多已填写的代码并删除补偿
更新 我从https://stackoverflow.com/a/38284236/736368复制了一个函数,使字符串成为读者。这似乎得到了这个工作。从性能角度来看,这似乎是一种好方法吗?
(->> ctx
(:request)
(fetch)
(:body)
(clojure.java.io/reader)
(html/html-resource)
(swap-body-tag)
(apply str) ; new
(string->stream) ; new
(swap-header))
答案 0 :(得分:1)
在调用comp
时,您的功能是否相反?它们首先应用于右侧。也许:
((comp swap-urls clean-footer clean-header) parsed)
是这样的:
(-> parsed
clean-header
clean-footer
swap-urls)
我倾向于喜欢线程优先的宏比comp
更好,因为我认为它更清晰。