在compojure中编写路由时出错

时间:2013-02-24 02:20:48

标签: clojure compojure

以下组件路线有效。

(defroutes app-routes
  (GET "/" [] (index))
  (GET "/twauth" [] (tw/authorize))
  (ANY "/twcallback" [] (do
                          (tw/callback)
                          (index)))
  (route/resources "/")
  (route/not-found "Not Found"))

(def app (handler/site app-routes))

但是我收到以下错误。它抛出一个java.nullpointer.exception。我在这里做错了什么?

(defroutes app-routes       (获取“/”[](索引))       (获取“/ twauth”[](tw / authorize))       (任何“/ twcallback”[](做                               (TW /回调)                               (索引))))

(defroutes base-routes
  (route/resources "/")
  (route/not-found "Not Found"))

(def app
  (-> app-routes
      base-routes
      handler/site))

1 个答案:

答案 0 :(得分:1)

您的基本路由匹配所有请求。我认为以下说明更好:

(defroutes base-routes
  (route/not-found "Not found"))

(def app
  (-> app-routes
      base-routes
      handler/site))

无论你在上面的app-routes中做了什么,都会检查base-routes并且总是返回not-found。请注意,每个请求都穿过两个路径,而不是首先匹配胜利。

因此,您需要将基本路由移动到您的应用路由中作为后备 - 就像您在工作示例中已经做过的那样 - 或者在app中撰写它们:

(def app
  (-> (routes app-routes base-routes)
      handler/site))

这里组合的路线确保第一场比赛获胜。