相关疑难解决方法(0)

组合路线背后的"大创意"是什么?

我是Clojure的新手,并且一直在使用Compojure编写基本的Web应用程序.不过,我正在用Compojure的defroutes语法碰壁,我认为我需要理解它背后的"如何"和"为什么".

看起来像Ring样式的应用程序以HTTP请求映射开始,然后只是通过一系列中间件函数传递请求,直到它被转换为响应映射,然后将其发送回浏览器.对于开发人员来说,这种风格似乎太"低级",因此需要像Compojure这样的工具.我可以看到在其他软件生态系统中需要更多的抽象,尤其是Python的WSGI.

问题是我不了解Compojure的方法.我们采用以下defroutesS表达式:

(defroutes main-routes
  (GET "/"  [] (workbench))
  (POST "/save" {form-params :form-params} (str form-params))
  (GET "/test" [& more] (str "<pre>" more "</pre>"))
  (GET ["/:filename" :filename #".*"] [filename]
    (response/file-response filename {:root "./static"}))
  (ANY "*"  [] "<h1>Page not found.</h1>"))
Run Code Online (Sandbox Code Playgroud)

我知道理解所有这些的关键在于一些宏观伏都教,但我还没有完全理解宏(还).我已经盯着defroutes源头很长一段时间了,但就是不明白!这里发生了什么?理解"大创意"可能会帮助我回答这些具体问题:

  1. 如何从路由功能(例如workbench功能)中访问Ring环境?例如,假设我想访问HTTP_ACCEPT标头或请求/中间件的其他部分?
  2. 什么是解构({form-params :form-params})?在解构时我可以使用哪些关键字?

我真的很喜欢Clojure,但我很难过!

clojure compojure

107
推荐指数
2
解决办法
2万
查看次数

标签 统计

clojure ×1

compojure ×1