标签: compojure

Compojure/Ring:为什么带有cookie存储的会话在服务器重启后仍然存在?

我有一个compojure应用程序,它使用环会话包装器来存储与当前用户关联的OAuth令牌.我希望这个令牌在服务器重新启动时保持可用,这样我就不必每次都要经过身份验证过程.

我假设使用cookie-store而不是默认的内存存储会有所帮助,但事实并非如此.我错过了什么?

这是代码的相关部分:

(defn auth-callback-handler
  [session {code :code}]
  (let [token (retrieve-token code)]
    (-> (redirect "/") (assoc :session (assoc session :token token)))))

(defroutes app-routes
  (GET "/" {session :session} (root-handler session))
  (GET "/auth-callback" {session :session params :params} (auth-callback-handler session params))
  (route/not-found "Not Found"))

(def app
  (-> (handler/site app-routes)
      (wrap-session {:store (cookie-store {:key "a 16-byte secret"})})))
Run Code Online (Sandbox Code Playgroud)

该函数root-handler使用令牌来决定是否有人登录,但不会以会话信息的方式返回任何内容.

cookies session clojure compojure ring

10
推荐指数
1
解决办法
2741
查看次数

ring-json的wrap-json-response中间件和compojure返回text/plain?

我正在尝试在我的compojure应用程序中使用ring-json的wrap-json-response中间件.我有一个简单的GET处理程序,它返回一个地图,就像{:foo 1},当我点击URL时,响应响应text/plain和一个空响应体.我似乎无法用JSON版本的地图来回应它.

这是我的处理程序代码:

(ns localshop.handler
  (:use compojure.core)
  (:require [localshop.routes.api.items :as routes-api-items]
            [ring.middleware.json :as middleware]
            [compojure.handler :as handler]
            [compojure.route :as route]))

;; map the route handlers
(defroutes app-routes
  (context "/api/item" [] routes-api-items/routes))

;; define the ring application
(def app
  (-> (handler/api app-routes)
      (middleware/wrap-json-body)
      (middleware/wrap-json-params)
      (middleware/wrap-json-response)))
Run Code Online (Sandbox Code Playgroud)

路由处理函数字面上只返回一个映射,所以代码很简单,我想我可以省略.如果从compojure路由处理程序返回一个映射是问题,那么也许就是这样呢?

clojure compojure ring

10
推荐指数
1
解决办法
7715
查看次数

在Compojure中开始使用CSS?

我在互联网上找到了一个非常基本的网页,现在我想做一些显而易见的事情并添加一些CSS,这样我就可以构建更好的页面.

  1. 我如何包含jQuery以及其他样式表?
  2. 我如何包含内联CSS,以便我可以投入text-align:center,例如,尝试快速更改?

常规jQuery包括:


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"/>

没有格式化的基本Hello World服务器:(更新为包含静态路由修复程序,以便其他人可以更快地启动和运行)


(ns hello-world
  (:use compojure))

(defn index
  [request]
    (html
    [:h1 "Hello World"]
    [:p "This is ugly with CSS!"])
    )

(defn hello
  [request]
  (html ""
   [:title "A very long title"]
   [:div.comment
    [:h1 "Hello's Page"]
    [:p "This would look better with some CSS formatting!"]]
))

(defroutes greeter
  (GET "/" index)
  (GET "/h" hello)
  (GET "/*"
       (or (serve-file "/opt/compojure/www/public" (params :*)) ;; This is needed to find CSS and js files
       :next))
  (ANY …
Run Code Online (Sandbox Code Playgroud)

clojure compojure

9
推荐指数
1
解决办法
3083
查看次数

Compojure从URL绑定HTTP请求参数,但不从POST表单绑定

Compojure不绑定POST表单中的字段.这是我的路线def:

(defroutes main-routes
  (POST "/query" {params :params}
    (debug (str "|" params "|"))
    "OK...")
)
Run Code Online (Sandbox Code Playgroud)

当我发布一个包含字段的表单时,我得到| {} |,即没有参数.顺便说一句,当我去http:// localhost/query?param1 = value1时,params不为空,并且值将打印在服务器控制台上.

表单字段是否有另一个绑定?

clojure compojure

9
推荐指数
1
解决办法
4656
查看次数

面向设计师/前端开发人员的Clojure Web框架

我所看到的所有流行的Clojure Web框架都使用打嗝来生成HTML.与其他从模板中解析语法的框架相比,我发现打嗝很难让前端设计人员适应.

是否有一个不需要前端开发人员学习LISP的clojure Web框架?

frameworks clojure compojure hiccup

9
推荐指数
2
解决办法
3079
查看次数

有没有办法在compojure中进行热重载?

我是新来的Clojure和的Compojure,我想知道是否有一种方法做的代码更改热重载,你可以与Ruby的西纳特拉(用猎枪宝石)或Java的游戏!

我正在跟随这个Heroku教程,所以如果有一种方法可以使用也可以工作的工头宝石.

谢谢!

clojure reload compojure foreman

9
推荐指数
1
解决办法
2980
查看次数

打嗝1.0.0-beta1错误

我正在使用hiccup-1.0.0-beta1创建一个compojure项目.我运行时得到以下堆栈跟踪lein ring server-headless:

Caused by: java.lang.IllegalAccessError: defelem does not exist
at clojure.core$refer.doInvoke(core.clj:3287)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invoke(core.clj:542)
at clojure.core$load_lib.doInvoke(core.clj:4781)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:542)
at clojure.core$load_libs.doInvoke(core.clj:4800)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:544)
at clojure.core$use.doInvoke(core.clj:4892)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at hiccup.page_helpers$eval17$loading__4414__auto____18.invoke(page_helpers.clj:1)
at hiccup.page_helpers$eval17.invoke(page_helpers.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:5424)
Run Code Online (Sandbox Code Playgroud)

这对我来说很困惑,因为page_helpers.clj打嗝中的文件不再存在:

$ jar tf lib/hiccup-1.0.0-beta1.jar 
META-INF/MANIFEST.MF
META-INF/maven/hiccup/hiccup/pom.xml
META-INF/maven/hiccup/hiccup/pom.properties
project.clj
hiccup/compiler.clj
hiccup/core.clj
hiccup/def.clj
hiccup/element.clj
hiccup/form.clj
hiccup/middleware.clj
hiccup/page.clj
hiccup/util.clj
$ 
Run Code Online (Sandbox Code Playgroud)

此外,我的代码甚至没有尝试引入page_helpers.clj:

(ns views.layout 
    (:require [app-config :as config])
    (:use hiccup.core)
    (:use hiccup.page)
    (:use hiccup.element))
Run Code Online (Sandbox Code Playgroud)

clojure compojure hiccup

9
推荐指数
1
解决办法
483
查看次数

如何在活跃中使用代码段?

我是一个Rails开发人员在Clojure中弄湿我的脚.我正在尝试用ERB做一些非常简单的事情,但我无法在生活中把它弄清楚.

假设我在layout.html中有一个简单的网站布局文件:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我有这些片段,例如header.html和footer.html以及这条简单的路线.

(deftemplate layout "layout.html" [])

(defroutes home-routes
  (GET "/" [] layout))
Run Code Online (Sandbox Code Playgroud)

如果请求转到"/",我怎样才能改变布局并将页眉和页脚片段插入其中?

clojure templating compojure enlive

9
推荐指数
1
解决办法
2896
查看次数

从嵌套映射(和向量)创建HTML表

我正在尝试创建一个我之前使用python编写的表(工作计划表),我认为这对我来说是一个很好的Clojure语言介绍.

我在Clojure(或者说是lisp)方面经验很少,而且我已经完成了谷歌和一些试验和错误,但似乎无法理解这种编码风格.

这是我的示例数据(将来会来自sqlite数据库):

(def smpl2 (ref {"Salaried" 
             [{"John Doe" ["12:00-20:00" nil nil nil "11:00-19:00"]}
              {"Mary Jane" [nil "12:00-20:00" nil nil nil "11:00-19:00"]}]
             "Shift Manager"
             [{"Peter Simpson" ["12:00-20:00" nil nil nil "11:00-19:00"]}
              {"Joe Jones" [nil "12:00-20:00" nil nil nil "11:00-19:00"]}]
             "Other"
             [{"Super Man" ["07:00-16:00" "07:00-16:00" "07:00-16:00" 
                       "07:00-16:00" "07:00-16:00"]}]}))
Run Code Online (Sandbox Code Playgroud)

我试图逐步完成这个原本使用,然后移动到doseq最后domap(这似乎更成功)和内容转储到一个HTML表(我原来的Python程序从SQLite数据库outputed到使用COM Excel电子表格此).

这是我的尝试(create-table fn):

(defn html-doc [title & body] 
  (html (doctype "xhtml/transitional") 
    [:html [:head [:title title]] [:body body]])) 

(defn create-table []
  [:h1 "Schedule"]
  [:hr]
  [:table (:style "border: …
Run Code Online (Sandbox Code Playgroud)

clojure compojure

8
推荐指数
1
解决办法
2965
查看次数

没有码头的环/组合

我知道可以使用创建war文件lein ring war,但它似乎仍然包含jetty依赖项.当我构建战争(并在tomcat上部署)时,有没有办法排除jetty依赖项?

如果我不能做到这一点,或者只是额外的罐子/类文件被打包到战争中但从未真正使用过?

clojure compojure ring leiningen

8
推荐指数
1
解决办法
460
查看次数