问题标签 [ring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
clojure - 如何在 Clojure + Compojure + Ring Web 应用程序中重用/包含现有的 java servlet 和过滤器?
我有一堆 Java EE 工件,例如 gzip servlet 过滤器、文件上传 servlet 等,这些都可以,我想在基于 Compojure 和 Ring 的 Clojure Web 应用程序中重用它们。
这可能吗?如果是这样,怎么做?
clojure - 用于重定向缺少的尾部斜杠 url 的环形解决方案
我试图使用环路由实现的行为在这个问题中被大致描述。
基本上,我有一些以斜杠结尾的 URL,并且我正在尝试创建一个中间件,该中间件将从例如重定向example.com/foo
到example.com/foo/
当且仅当/foo/
是有效的 URL 而/foo
不是有效的 URL。
我目前正在使用这个中间件
几乎所有它应该做的事情:它从重定向/foo
到/foo/
iff/foo/
存在并且/foo
不存在。
我担心的是,这个解决方案(handler req)
至少会调用两次——一次是在请求/foo
时,一次是在客户端请求重定向的 URL 时。现在这不是问题,但我可以想象对于具有数百个数据库查询或类似事情的一些慢速页面的响应时间加倍是痛苦的。
有没有办法简单地检查给定 URL 的处理程序是否存在,而不调用该处理程序?我们可以通过说变得(:body request)
懒惰来完全避免这个问题吗?
macros - 如何在 clojure 中编写此宏?
我有这个功能:
但我一直在更改页面列表-which-resolve-to-functions-with-the-same-name,我希望能够写:
(def-handler 善恶中立)
反而:
但我被困住了。到目前为止,我最好的镜头如下:
但它不太有效,因为生成的调用中的请求不是 gensym,我不知道如何在其中获取 gensym。
这看起来很有希望,直到我注意到它产生了一个新的 gensym:
clojure - 如何在 Lein-Ring uberwar 中包含属性
我们正在尝试使用该lein ring uberwar
命令在 JBoss 上对 Leiningen 项目进行测试部署。在我尝试读取属性文件之前,我在这方面取得了巨大的成功。
我有一个将属性文件读入地图的函数:
我像这样使用它:
“application.properties”是我的项目目录中的文件名。一切都很好lein run
,但是当我创建独立战争并将其 cp 到 JBoss 时,这是堆栈跟踪:
我注意到你可以设置一个名为:war-resources-path的 defproject 键,所以我将我的属性文件放入 $PROJECT_ROOT/war-resources 目录(该目录的默认值),但我仍然没有任何运气。
有谁知道使用从属性文件中读取的最佳方法lein ring uberwar
?
clojure - ring-json 的 wrap-json-response 中间件和组合返回 text/plain?
我正在尝试在我的 compojure 应用程序中使用 ring-json 的 wrap-json-response 中间件。我有一个简单的 GET 处理程序,它返回一个地图,比如{:foo 1}
,当我点击 URL 时,环会响应text/plain
和一个空的响应体。我似乎无法让它响应地图的 JSON 版本。
这是我的处理程序代码:
路由处理函数实际上只是返回一个地图,所以代码很简单,我想我可以省略。如果从组合路由处理程序返回地图是问题所在,那么也许就是这样?
clojure - 为什么我的 Ring 中间件在请求中看不到 :params 映射?
我正在编写一个Ring
中间件,并且还使用Compojure
. 我希望我的中间件查看 :params 映射以查看用户是否提供了特定密钥。不过,在我的中间件函数中,请求映射不包含 :params 映射。在最终的请求处理程序中,有一个:params
映射。我在想:params
地图没有在我的自定义中间件之前设置,但我不知道如何让它实际设置。
有任何想法吗?
上面是我的 handler.clj 文件,下面是中间件本身。
layout - Ring / Jetty中的自动代码重新加载
将 Ring / Jetty 与 Clojure 一起使用,当我对代码进行任何更改时,我必须重新加载整个 JVM。
有没有办法让 Jetty 与我的代码更改保持异步,所以我可以简单地刷新浏览器窗口并立即获取更改?
具体来说,我正在使用 Hiccup 进行 HTML 解析,它主要是我正在制作的布局更改。
如果布局更改被自动编译并在刷新时在浏览器中可用,那将是一个巨大的节省时间。
有人有这方面的信息吗?有什么解决办法吗?
clojure - 尝试将 ring.middleware.json-params 与 compojure 一起使用
我是 Clojure、leiningen 和 java 工具链的新手(但不是 lisp、函数式编程、一般软件)。我正在尝试在 Compojure 中引导一些 RESTful Web 服务。
按照以下说明,我可以毫无困难地开始使用 compojure
我现在正在尝试从现已过时的网站逐步添加功能
leiningen
从上面第一个链接的工作项目开始(它通过 工作lein ring start
,我将一行添加到 project.clj
然后我重新运行lein deps
并下载了一堆东西。一切都好,该项目仍然有效。现在我添加一行handler.clj
:
现在我得到了
由于我是工具链的菜鸟,我不知道如何设置或检查类路径或找出json_params
leiningen 存放的位置,甚至不知道如何查看类文件以找出名称应该是什么.
除了这个问题的具体解决方案之外,我希望能得到一些新手的指导,所以也许我将来可以自己解决这样的简单问题。
clojure - 如何使用 Ring 测试会话状态?
我正在尝试使用 Ring + Compojure + lib-noir 进行 Clojure Web 开发,但我不知道如何测试会话状态。
clojure - 如何在同一台服务器上运行多个 Ring 应用程序?
我是 Ring 的新手(以及一般的 Clojure 服务器端编程)。我有一个基于 Ring 的应用程序,它在“开发模式”下运行良好,即它可以监听localhost:3000
并做出适当的响应。作为部署此应用程序的一部分,我想将应用程序的基本 URL 更改为类似的myserver.com/analytics/v1
内容,例如,以前发送到的请求localhost:3000/foo
现在应该发送到myserver.com/analytics/v1/foo
.
我想我在这里有两个密切相关的问题:如何告诉 Ring/Jetty 只在某个不是服务器根 URL 的 URL 上监听?以及如何设置它,以便我可以添加另一个应用程序(例如,myserver.com/analytics/v2
)而不会为第一个应用程序停机?我是否需要编写另一个 Ring 应用程序来侦听myserver.com/
并将请求路由到我的其他应用程序?