0

以下复合路线有效。

(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 (GET "/" [] (index)) (GET "/twauth" [] (tw/authorize)) (ANY "/twcallback" [] (do (tw/callback) (index))) )

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

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

1 回答 1

1

您的基本路线匹配所有请求。我认为以下内容更好地说明了这一点:

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

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

无论你在上面的 app-routes 中做什么,base-routes 都会在之后检查并且总是返回 not-found。请注意,每个请求都通过两个路由进行处理,而不是第一个匹配获胜。

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

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

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

于 2013-04-06T13:26:56.610 回答