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

use*_*526 3 google-app-engine http clojure httpwebrequest ring

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

谢谢你,泽先生

Mic*_*zyk 5

总是只有一个顶级处理程序 - 毕竟,即使在某个概念级别有多个处理程序,应用程序需要决定以某种方式应用于给定请求的那个,因此做出选择的例程变为顶级处理程序.所以,简短的回答是你需要提供一个函数来查看请求并将其交给应用程序内几个处理程序中的相应处理程序; 该函数是给予run-jetty(或等效的)处理程序.

通常使用Ring + Compojure,您将拥有一些用于处理特定URI的基本("内部")处理程序和一些作为中间件实现的特殊用途处理程序(例如,用于404).前者往往以形式定义defroutes,而后者则是高阶函数.

中间件处理程序在查看请求后自行决定是否要立即返回响应或委托给处理程序.基于路由的"内部"处理程序被调用适当的URI并且可以选择返回nil以指示请求对它们没有意义(此时剩余的基于路由的处理程序被尝试;如果全部nil输出,则最终响应通常由某些中间件生成,可能返回404).

我已经写了有关的Compojure冗长的答案在这里 ; 也许它可能有助于获得Compojure基于路由的处理程序定义.