Проблема с функцией внутри маршрута (Clojure/Compojure)

У меня возникла проблема с использованием следующего кода внутри маршрута.

(str "Size " (t/pay-billets-found)) ;-> "Size 2"

(t/pay-billets-found) возвращает целое число.

Код моего маршрута:

(defroutes app-routes
(POST "/upload" []
     {:message (str "a " (t/pay-billets-found))}))

С дай мне это:

    clojure.lang.ExceptionInfo: clj-http: status 500
                    client.clj:171 clj-http.client/wrap-exceptions[fn]
                    client.clj:522 clj-http.client/wrap-accept[fn]
                    client.clj:536 clj-http.client/wrap-accept-encoding[fn]
                    client.clj:512 clj-http.client/wrap-content-type[fn]
                    client.clj:683 clj-http.client/wrap-form-params[fn]
                    client.clj:707 clj-http.client/wrap-nested-params[fn]
                    client.clj:624 clj-http.client/wrap-method[fn]
                   cookies.clj:121 clj-http.cookies/wrap-cookies[fn]
                      links.clj:50 clj-http.links/wrap-links[fn]
                    client.clj:726 clj-http.client/wrap-unknown-host[fn]
                    client.clj:847 clj-http.client/put
                   RestFn.java:439 clojure.lang.RestFn.invoke
                       core.clj:33 tbbrr.core/pay-billet
                       core.clj:58 tbbrr.core/pay-billets-found[fn]
                       core.clj:56 tbbrr.core/pay-billets-found[fn]
                   LazySeq.java:40 clojure.lang.LazySeq.sval
                   LazySeq.java:49 clojure.lang.LazySeq.seq
               ChunkedCons.java:59 clojure.lang.ChunkedCons.chunkedNext
                      core.clj:667 clojure.core/chunk-next
                 protocols.clj:101 clojure.core.protocols/fn
                  protocols.clj:19 clojure.core.protocols/fn[fn]
                  protocols.clj:31 clojure.core.protocols/seq-reduce
                  protocols.clj:54 clojure.core.protocols/fn
                  protocols.clj:13 clojure.core.protocols/fn[fn]
                     core.clj:6289 clojure.core/reduce
                     core.clj:6341 clojure.core/into
                       core.clj:56 tbbrr.core/pay-billets-found
                     server.clj:36 tbbrr.server/fn
                       core.clj:94 compojure.core/make-route[fn]
                       core.clj:40 compojure.core/if-route[fn]
                       core.clj:25 compojure.core/if-method[fn]
                      core.clj:107 compojure.core/routing[fn]
                     core.clj:2515 clojure.core/some
                      core.clj:107 compojure.core/routing
                   RestFn.java:139 clojure.lang.RestFn.applyTo
                      core.clj:626 clojure.core/apply
                      core.clj:112 compojure.core/routes[fn]
             keyword_params.clj:32 ring.middleware.keyword-params/wrap-keyword-params[fn]
              nested_params.clj:75 ring.middleware.nested-params/wrap-nested-params[fn]
                     params.clj:58 ring.middleware.params/wrap-params[fn]
          multipart_params.clj:107 ring.middleware.multipart-params/wrap-multipart-params[fn]
                      flash.clj:31 ring.middleware.flash/wrap-flash[fn]
                    session.clj:85 ring.middleware.session/wrap-session[fn]
                      Var.java:379 clojure.lang.Var.invoke
                     reload.clj:18 ring.middleware.reload/wrap-reload[fn]
                 stacktrace.clj:17 ring.middleware.stacktrace/wrap-stacktrace-log[fn]
                 stacktrace.clj:80 ring.middleware.stacktrace/wrap-stacktrace-web[fn]
                      jetty.clj:18 ring.adapter.jetty/proxy-handler[fn]
                  (Unknown Source)        ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle
           HandlerWrapper.java:116 org.eclipse.jetty.server.handler.HandlerWrapper.handle
                   Server.java:359 org.eclipse.jetty.server.Server.handle
   AbstractHttpConnection.java:483 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest
   AbstractHttpConnection.java:920 org.eclipse.jetty.server.AbstractHttpConnection.headerComplete
   AbstractHttpConnection.java:982 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete
               HttpParser.java:642 org.eclipse.jetty.http.HttpParser.parseNext
               HttpParser.java:235 org.eclipse.jetty.http.HttpParser.parseAvailable
       AsyncHttpConnection.java:82 org.eclipse.jetty.server.AsyncHttpConnection.handle
    SelectChannelEndPoint.java:628 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle
     SelectChannelEndPoint.java:52 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run
         QueuedThreadPool.java:608 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob
         QueuedThreadPool.java:543 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run
                   Thread.java:744 java.lang.Thread.run

Спасибо.


person Édipo Féderle    schedule 27.10.2014    source источник
comment
Похоже, ваше исключение происходит внутри pay-billets-found (tbbrr.core). Можете ли вы поделиться этим кодом?   -  person Diego Basch    schedule 28.10.2014
comment
@DiegoBasch вот код: gist.github.com/edipofederle/3c6e6d87c38d7d31b108   -  person Édipo Féderle    schedule 28.10.2014
comment
Вы звоните put с двумя картами вместо одной. Какой должна быть вторая карта? В любом случае, выньте это.   -  person Diego Basch    schedule 28.10.2014
comment
Извините, я удалил одну карту. Но проблема остается прежней... Спасибо.   -  person Édipo Féderle    schedule 28.10.2014
comment
Итак, вы уверены, что ваш вызов put работает? Исключение предполагает, что это не так. Можете ли вы попробовать это вручную извне вашего приложения или через curl, чтобы увидеть, связана ли проблема с сервером, который получает этот вызов?   -  person Diego Basch    schedule 28.10.2014
comment
Да, пут работает. Я использую его на repl... и через curl.   -  person Édipo Féderle    schedule 28.10.2014
comment
Давайте продолжим обсуждение в чате.   -  person Édipo Féderle    schedule 28.10.2014


Ответы (1)


Проблема в том, что вы возвращаете карту {:message (str "a " (t/pay-billets-found))}

Таким образом, кольцо предполагает, что вы создаете правильный объект ответа с кодом состояния и чем-то еще.

Если вы хотите вернуть edn, вы должны вместо этого сделать:

(pr-str {:message (str "a " (t/pay-billets-found))})

Если вы хотите правильно построить ответ на звонок, либо установите статус и текст:

{:status 200 :body (pr-str {:message (str "a " (t/pay-billets-found))})}

Или используйте помощник ring.util.response.

person guilespi    schedule 28.10.2014