(ns ring-demo.core
(:require [ring.adapter.jetty :as jetty]
))
(defn method-1 [request]
{:status 200
:headers {"Content-Type" "text/plain"}
:body (str "Hello World" (:is-bili request))})
(defn method-2 [request]
(assoc request :is-bili true))
(defn get-method-chain [request]
'(method-2 method-1))
(defn execute-method-chain [request method-chain]
(concat `(-> ~request) method-chain))
(defn handler [request]
(let [path (:uri request)]
(print path)
(cond (= path "/")
(eval '(execute-method-chain request (get-method-chain request)))
:else
())))
(def app
"app domain"
handler)I run the code with lein ring servermy project.cli like this(defproject ring-demo "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.10.0"]
[ring/ring-core "1.6.3"]
[ring/ring-jetty-adapter "1.6.3"]
[ring-logger "1.0.1"]
[ring/ring-devel "1.6.3"]]
:repl-options {:init-ns ring-demo.core}
:ring {:handler ring-demo.core/app}
:plugins [[org.clojure/core.unify "0.5.7"]
[lein-ring "0.12.4" :exclusions [org.clojure/core.unify]]])
--
You received this message because you are subscribed to the Google Groups "Ring" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ring-clojure...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
(defn handler [request]
(let [path (:uri request)]
(print path)
(cond (= path "/")
(eval (execute-method-chain request (get-method-chain request)))
:else
())))
and I load the file and run a followed code in REPL, it work fine
(eval (execute-method-chain {} (get-method-chain {}))) => {:status 200, :headers {"Content-Type" "text/plain"}, :body "Hello Worldtrue"}but when I run it with lein ring server
I got a new error
clojure.lang.Compiler$CompilerException
Syntax error compiling fn* at (0:0).
Compiler.java:7114 clojure.lang.Compiler.analyzeSeq Compiler.java:6789 clojure.lang.Compiler.analyze Compiler.java:7173 clojure.lang.Compiler.eval Compiler.java:7131 clojure.lang.Compiler.eval core.clj:3214 clojure.core/eval core.clj:3210 clojure.core/eval core.clj:29 ring-demo.core/handler core.clj:25 ring-demo.core/handler Var.java:384 clojure.lang.Var.invoke reload.clj:39 ring.middleware.reload/wrap-reload[fn] stacktrace.clj:26 ring.middleware.stacktrace/wrap-stacktrace-log[fn] stacktrace.clj:96 ring.middleware.stacktrace/wrap-stacktrace-web[fn] jetty.clj:25 ring.adapter.jetty/proxy-handler[fn] (Unknown Source) ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle HandlerWrapper.java:97 org.eclipse.jetty.server.handler.HandlerWrapper.handle Server.java:499 org.eclipse.jetty.server.Server.handle HttpChannel.java:311 org.eclipse.jetty.server.HttpChannel.handle HttpConnection.java:258 org.eclipse.jetty.server.HttpConnection.onFillable AbstractConnection.java:544 org.eclipse.jetty.io.AbstractConnection$2.run QueuedThreadPool.java:635 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob QueuedThreadPool.java:555 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run Thread.java:834 java.lang.Thread.run Caused by java.lang.RuntimeException
Can't embed object in code, maybe print-dup not defined: HttpInputOverHTTP@609e9ea
Util.java:221 clojure.lang.Util.runtimeException Compiler.java:4893 clojure.lang.Compiler$ObjExpr.emitValue Compiler.java:4704 clojure.lang.Compiler$ObjExpr.emitListAsObjectArray Compiler.java:4835 clojure.lang.Compiler$ObjExpr.emitValue Compiler.java:4934 clojure.lang.Compiler$ObjExpr.emitConstants Compiler.java:4612 clojure.lang.Compiler$ObjExpr.compile Compiler.java:4106 clojure.lang.Compiler$FnExpr.parse Compiler.java:7104 clojure.lang.Compiler.analyzeSeq Compiler.java:6789 clojure.lang.Compiler.analyze Compiler.java:7173 clojure.lang.Compiler.eval Compiler.java:7131 clojure.lang.Compiler.eval core.clj:3214 clojure.core/eval core.clj:3210 clojure.core/eval core.clj:29 ring-demo.core/handler core.clj:25 ring-demo.core/handler Var.java:384 clojure.lang.Var.invoke reload.clj:39 ring.middleware.reload/wrap-reload[fn] stacktrace.clj:26 ring.middleware.stacktrace/wrap-stacktrace-log[fn] stacktrace.clj:96 ring.middleware.stacktrace/wrap-stacktrace-web[fn] jetty.clj:25 ring.adapter.jetty/proxy-handler[fn] (Unknown Source) ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle HandlerWrapper.java:97 org.eclipse.jetty.server.handler.HandlerWrapper.handle Server.java:499 org.eclipse.jetty.server.Server.handle HttpChannel.java:311 org.eclipse.jetty.server.HttpChannel.handle HttpConnection.java:258 org.eclipse.jetty.server.HttpConnection.onFillable AbstractConnection.java:544 org.eclipse.jetty.io.AbstractConnection$2.run QueuedThreadPool.java:635 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob QueuedThreadPool.java:555 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run Thread.java:834 java.lang.Thread.run