http - 了解 Ring 和 Appengine-magic (Clojure) 上的处理程序

标签 http google-app-engine clojure httpwebrequest ring

我开始研究一些 clojure 网络应用程序,并决定结合使用 Ring + Compojure。 最近我决定尝试使用 Google Appengine 和 AppEngine-magic (https://github.com/gcv/appengine-magic)。然而,appengine-magic(通过它的启动函数)和 ring 的 run-jetty 函数都只接受 1 个处理程序作为参数,我正在实现几个处理程序,并且想知道如何部署它们。

提前致谢, 泽

最佳答案

永远只有一个顶级处理程序——毕竟,即使在某些概念层面上有多个处理程序,应用程序也需要以某种方式决定将哪个处理程序应用于给定请求,因此例程选择成为顶级处理程序。因此,简短的回答是您需要提供一个函数来查看请求并将其传递给应用程序内多个处理程序中的适当处理程序;该函数是要提供给 run-jetty(或等效项)的处理程序。

通常使用 Ring + Compojure,你会有一些基本的(“内部”)处理程序用于处理特定的 URI 和一些作为中间件实现的特殊用途的处理程序(例如,404s)。前者倾向于以defroutes形式定义,而后者则是高阶函数。

中间件处理程序在查看请求后自行决定是要立即返回响应还是委托(delegate)给它们周围的处理程序。为适当的 URI 调用基于路由的“内部”处理程序,并可以选择返回 nil 以指示请求对它们没有意义(此时剩余的基于路由的处理程序已尝试;如果所有 nil 都输出,则最终响应通常由某个中间件生成,可能返回 404)。

关于 Compojure here 我写了一个很长的回答;也许它可能有助于掌握 Compojure 基于路由的处理程序定义的窍门。

关于http - 了解 Ring 和 Appengine-magic (Clojure) 上的处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4467057/

相关文章:

http - 为什么 HTTP 响应负载在 Wireshark tcp 流中显示为乱码?

java - 如何同时接受 multipart 和 application/x-www-form-urlencoded?

http - Grails 未找到线程绑定(bind)请求

angularjs - Angular JS-$Http Post 不适用于 chrome/FireFox,但 $http.get 工作正常

google-app-engine - java.io.PrintWriter.write 处的 java.lang.NullPointerException

api - clojure.lang等api

java - 迁移到数据存储 HRD 后, "serving url"是否有效?

java - 在控制台中监控 google app engine cron 作业?

postgresql - 无法使用 postgresql 将 clojure 网络应用程序上传到谷歌应用引擎

logging - 控制台上未显示 Clojure Web 服务中的基本日志记录