我有一个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使用令牌来决定是否有人登录,但不会以会话信息的方式返回任何内容.
我正在尝试在我的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路由处理程序返回一个映射是问题,那么也许就是这样呢?
我在互联网上找到了一个非常基本的网页,现在我想做一些显而易见的事情并添加一些CSS,这样我就可以构建更好的页面.
常规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) 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 Web框架都使用打嗝来生成HTML.与其他从模板中解析语法的框架相比,我发现打嗝很难让前端设计人员适应.
是否有一个不需要前端开发人员学习LISP的clojure Web框架?
我是新来的Clojure和的Compojure,我想知道是否有一种方法做的代码更改热重载,你可以与Ruby的西纳特拉(用猎枪宝石)或Java的游戏!
我正在跟随这个Heroku教程,所以如果有一种方法可以使用也可以工作的工头宝石.
谢谢!
我正在使用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) 我是一个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)
如果请求转到"/",我怎样才能改变布局并将页眉和页脚片段插入其中?
我正在尝试创建一个我之前使用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) 我知道可以使用创建war文件lein ring war,但它似乎仍然包含jetty依赖项.当我构建战争(并在tomcat上部署)时,有没有办法排除jetty依赖项?
如果我不能做到这一点,或者只是额外的罐子/类文件被打包到战争中但从未真正使用过?