带有Ring和Compojure的绝对路由URL

时间:2014-09-26 08:39:27

标签: clojure absolute-path compojure ring

我需要在oAuth身份验证后将用户重定向到绝对网址。

如何构建Compojure路由的绝对URL?非AJAX HTTP请求似乎省略了Origin标头。是否有Ring或Compojure辅助函数来构建绝对URL,或者我应该使用该方案和Host标题手动执行此操作吗?

最后,并且可能值得一个单独的问题,Compojure中是否有辅助函数来生成基于处理程序的路由URL,MVC中的ala Html.ActionLink(...)

1 个答案:

答案 0 :(得分:4)

ring-headers项目有middleware,相对于绝对网址进行转换:

(ns ring.middleware.absolute-redirects
  "Middleware for correcting relative redirects so they adhere to the HTTP RFC."
  (:require [ring.util.request :as req])
  (:import  [java.net URL MalformedURLException]))

(defn- url? [^String s]
  (try (URL. s) true
       (catch MalformedURLException _ false)))

(defn absolute-url [location request]
  (if (url? location)
    location
    (let [url (URL. (req/request-url request))]
      (str (URL. url location)))))