标签: compojure

2
推荐指数
1
解决办法
1313
查看次数

具有多个参数的compojure路由

是否可以定义包含多个参数的compojure路径?

即:

(def my-routes
  (routes 
    (GET "/something/:param1/:param2" [] my-handler)))
Run Code Online (Sandbox Code Playgroud)

clojure compojure clout

2
推荐指数
1
解决办法
640
查看次数

无法开始使用clojure kORMa

我试图使用clojure kORMa与compojure,webapp在这里nepleaks.

首先,我添加了kORMa依赖

[korma "0.3.0-RC4"]
Run Code Online (Sandbox Code Playgroud)

lein deps很酷,然后创建src/hotel/conf/datasource.clj,如下所示:

(ns hotel.conf.datasource)
   (use [korma.db])
   (use [korma.core])
)

(defdb db (mysql {:db "nepleaks"
                     :user "root"
                     :password "mysql55"}))

(defentity users)
Run Code Online (Sandbox Code Playgroud)

lein ring server 既没有抛出任何异常也没有创建数据库实体.

我错过了什么吗?我需要更多配置吗?

mysql clojure compojure korma

2
推荐指数
1
解决办法
738
查看次数

"使用Clojure进行Web开发" - 编译错误:没有这样的var:sql/create-table

我正在使用Dmitri Sotnikov的"使用Clojure进行Web开发"来学习如何构建Web应用程序.当我尝试运行一些代码来访问数据库时,会发生一些编译错误:

跑完之后

>莱恩环服务器

我有:

Compiling tonglindb.models.db
Exception in thread "main" java.lang.RuntimeException: No such var: sql/create-table, compiling:(tonglindb/models/db.clj:10:3)
    at clojure.lang.Compiler.analyze(Compiler.java:6380)
    at clojure.lang.Compiler.analyze(Compiler.java:6322)
    at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3573)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6562)
    at clojure.lang.Compiler.analyze(Compiler.java:6361)
    at clojure.lang.Compiler.analyze(Compiler.java:6322)
    at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5708)
    at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5139)
    at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3751)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6558)
    at clojure.lang.Compiler.analyze(Compiler.java:6361)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6548)
    at clojure.lang.Compiler.analyze(Compiler.java:6361)
    at clojure.lang.Compiler.access$100(Compiler.java:37)
    at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:529)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6560)
    at clojure.lang.Compiler.analyze(Compiler.java:6361)
    at clojure.lang.Compiler.analyze(Compiler.java:6322)
    at clojure.lang.Compiler.compile1(Compiler.java:7148)
    at clojure.lang.Compiler.compile(Compiler.java:7219)
    at clojure.lang.RT.compile(RT.java:398)
    at clojure.lang.RT.load(RT.java:438)
    at clojure.lang.RT.load(RT.java:411)
    at clojure.core$load$fn__5018.invoke(core.clj:5530)
    at clojure.core$load.doInvoke(core.clj:5529)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$load_one.invoke(core.clj:5336)
    at clojure.core$compile$fn__5023.invoke(core.clj:5541)
    at clojure.core$compile.invoke(core.clj:5540)
    at user$eval9.invoke(form-init2674485681777655551.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:6619)
    at …
Run Code Online (Sandbox Code Playgroud)

jdbc clojure compojure

2
推荐指数
1
解决办法
1412
查看次数

Compojure 未获取请求正文

我有一个使用 Compojure 和此类端点的应用程序

(defroutes routes
  (POST "/api/v1/echo" req (str req))

(def http-handler
  (reload/wrap-reload (wrap-defaults #'routes api-defaults)))

(defn run-web-server []
    (run-jetty http-handler {:port 10555 :join? false}))
Run Code Online (Sandbox Code Playgroud)

当我尝试这个卷曲请求时

curl -X POST -H "Content-Type: application/json" http://localhost:10555/api/v1/echo -d '{"hello": "world"}'
Run Code Online (Sandbox Code Playgroud)

我得到这个回应

{:ssl-client-cert nil, :remote-addr "0:0:0:0:0:0:0:1", :params {}, :route-params {}, :headers {"accept" "*/*", "user-agent" "curl/7.43.0", "content-type" "application/json", "content-length" "18", "host" "localhost:10555"}, :server-port 10555, :content-length 18, :form-params {}, :query-params {}, :content-type "application/json", :character-encoding nil, :uri "/api/v1/echo", :server-name "localhost", :query-string nil, :body #object[org.eclipse.jetty.server.HttpInput 0x4317e5fa "org.eclipse.jetty.server.HttpInput@4317e5fa"], :scheme :http, …
Run Code Online (Sandbox Code Playgroud)

clojure compojure

2
推荐指数
1
解决办法
3030
查看次数

如何绑定动态变量?

如何在compojure中绑定动态变量?请参阅下面的示例,这里request-id是为每个api请求生成的唯一uuid.我希望能够访问该请求ID在随后的方法记录等等.我已经使用绑定功能试过,但我仍然无法访问请求IDsome-page/some-method.

handler.clj

(ns some_app.handler
  (:require
    [compojure.api.sweet :refer :all]
    [compojure.route :as route]
    [some_api.some_page :as some-page]))

(def ^:dynamic *request-id*
  nil)

(defn ^:private generate-request-id []
  (str (java.util.UUID/randomUUID)))

(def app
  (binding [*request-id* (generate-request-id)]
    (api
      (context "/api" [] (GET "/some-page" [] (some-page/some-method))))))
Run Code Online (Sandbox Code Playgroud)

一些-page.clj

(ns some_app.some_page
(:require
        [clojure.tools.logging :as log]))

(def some-method []
  (log/info {:request-id *request-id*}))
Run Code Online (Sandbox Code Playgroud)

binding clojure compojure compojure-api

2
推荐指数
1
解决办法
119
查看次数

急于修复“警告:任何?已在命名空间:leiningen.midje 中引用:#'clojure.core/any?,被替换为:#'leiningen.midje/any?”

我尝试lein new compojure financeiro使用 midje 框架在 leiningen 的 compojure 模板 ( ) 中运行测试并收到警告:

lein midje
WARNING: any? already refers to: #'clojure.core/any? in namespace: leiningen.midje, being replaced by: #'leiningen.midje/any?
nil
All checks (3) succeeded.
Run Code Online (Sandbox Code Playgroud)

我的测试代码handler_test.clj

lein midje
WARNING: any? already refers to: #'clojure.core/any? in namespace: leiningen.midje, being replaced by: #'leiningen.midje/any?
nil
All checks (3) succeeded.
Run Code Online (Sandbox Code Playgroud)

我的项目文件project.clj

(ns financeiro.handler-test
  (:require
    ; [clojure.test :refer :all]
    [midje.sweet :refer :all]
    [ring.mock.request :as mock]
    [financeiro.handler :refer :all]))

; (deftest test-app …
Run Code Online (Sandbox Code Playgroud)

clojure compojure leiningen midje

2
推荐指数
1
解决办法
2200
查看次数

使用自定义:在环形中间件中使用wrap-multipart-params存储

我正在尝试使用自定义:store选项wrap-multipart-params,而我明显得到默认商店.我的自定义函数甚至没有被调用.

(mp/wrap-multipart-params 
   (POST "/upload-x" request (upload/upload-file request))
   {:store upload/logging-store})
Run Code Online (Sandbox Code Playgroud)

我的日志存储功能看起来像这样(它现在只是一个虚拟 - 最终我想以自定义方式处理流)这些IO都没有发生.

(defn logging-store [{filename     :filename
                      content-type :content-type
                      stream       :stream
                      :as params}]
  (println "in logging store")
  (pprint filename)
  (pprint params)
  filename)
Run Code Online (Sandbox Code Playgroud)

upload-file看起来像这样:

(defn upload-file [{params :params
                    session :session :as request}]
  (let [user-id (:user-id session)
        files (get params "files")]
    (pprint request)
    (pprint params)
    (response/response
     {:status    :success})))
Run Code Online (Sandbox Code Playgroud)

请求和参数的打印清楚地显示了那里的多部分参数,并且它们由临时文件存储处理:

 :multipart-params
 {"files"
  {:size 1674,
   :tempfile
   #<File /var/folders/rx/9ntjyyvs35qbmcbp6rhfmj200000gn/T/ring-multipart-3853352501927893381.tmp>,
   :content-type "application/octet-stream",
   :filename "blog-test.clj"}},
Run Code Online (Sandbox Code Playgroud)

编辑:应用程序定义(根据要求)

(defroutes file-list-routes
  (GET "/simple-upload" request (upload/simple-upload-file request))
  (mp/wrap-multipart-params …
Run Code Online (Sandbox Code Playgroud)

clojure compojure ring

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

java.lang.String无法强制转换为clojure.lang.IFn

我正在尝试将一些数据添加到app引擎数据存储区中.这是我的功能

(defn createUser [email phone roleId status]
  (println (db/isIdExist "users" "email" email))
  (if (db/isIdExist "users" "email" email) 
    (str "false")
    ((db/addUser email phone roleId status) (str "true"))))
Run Code Online (Sandbox Code Playgroud)

在这里我想根据isIdExist函数的值打印false (如果电子邮件已经存在,则返回true,否则为false)现在当我运行它时,如果isIdExist == true那时它打印为false但是当isIdExist == false它在数据存储区中添加值但是给出了这个错误.有人可以帮助为什么会发生这种情况,我在这里错过了什么概念?谢谢

clojure compojure clojure-java-interop clojurescript

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

Clojure,Compojure:Path参数总是在Compojure API中作为String传递

我传递路径参数来从数据库中获取数据.

终点

http://localhost:3000/hello/1000

GET方法代码

(ns clojure-dauble-business-api.core
  (:require [compojure.api.sweet :refer :all]
            [ring.util.http-response :refer :all]
            [clojure-dauble-business-api.logic :as logic]
            [clojure.tools.logging :as log]
            [clojure-dauble-business-api.domain.artwork])
  (:import [clojure_dauble_business_api.domain.artwork Artwork]))

(defapi app
  (GET ["/hello/:id", :id #"[0-9]+"] [id]
    (log/info "Function begins from here" id)
    (ok {:artwork (logic/artwork-id id)})))
Run Code Online (Sandbox Code Playgroud)

当我从邮递员到达终点时,我收到此错误,

org.postgresql.util.PSQLException: ERROR: operator does not exist: integer = character varying
Run Code Online (Sandbox Code Playgroud)

我已经知道值id作为String值传递给查询.

在传递给Query之前,将Path参数类型更改为Number的最佳方法是什么?

clojure compojure compojure-api

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