2013-07-27 6 views
2

는 내가 뭔가 잘못하고 있어야합니다 확신합니다 ... 여기 Clojure의 관련 라인은 다음과 같습니다ring.middleware.json/wrap-json-params는 문자열에서 숫자를 파싱합니까?

끝 부분 "에 println은"유형 보여주는
(ns command.command-server 
    (:use [org.httpkit.server :only [run-server]]) 
    (:use [storage.core-storage]) 
    (:use compojure.core) 
    (:use [command.event-loop :only [enqueue]]) 
    (:require [compojure.handler :as handler] 
      [compojure.route :as route] 
      [ring.middleware.json :as middleware])) 


(def app 
    (-> (handler/api app-routes) 
    (middleware/wrap-json-body) 
    (middleware/wrap-json-response) 
    (middleware/wrap-json-params))) 


;in app-routes, the rest left out for brevity 
    (POST "/request" {json :params} 
     (do    
      (queue-request json) 
      (response {:status 200}) 
     )) 

(defn queue-request [evt] 
    (let [new-evt (assoc evt :type (keyword (:type evt)))] 
    (println (str (type (:val1 evt)))) 
    (enqueue new-evt))) 

: java.lang.String의로 VAL1을 jquery에서 다음을 보낼 때 :

$.ajax({ 
    type: "POST", 
    url: 'http://localhost:9090/request', 
    data: {type: 'add-request', val1: 12, val2: 50}, 
    success: function(data){ 
     console.log(data); 
    } 
}); 

그래서 내가 뭘 잘못하고 있니?

+1

나는 코드에서 어떤 일이 일어날 지 알지 못합니다. 문제를 재현 해보기 위해 간단한 예제를 만들었지 만 할 수 없었습니다. 더 자세한 정보를 제공 할 수 있습니까? – Jeremy

+0

jQuery 대신 cURL을 사용하여 다른 결과가 표시되는지 확인하십시오. – Jeremy

+0

나는 확실히 할 것이다. – user1020853

답변

0

이것은 링 미들웨어가 아니라 jQuery 요청 일 수 있습니다.

jQuery에 대해 많이 알지는 못했지만, 방금 this answer을 보았습니다. 상황을 설명 할 수있는 것처럼 보입니다. 간단히 말해 쿼리의 데이터는 URL에 문자열로 인코딩됩니다. URL 인코딩은 형식을 지정하지 않으므로 문자열이 아닌 문자열로 링에 의해 파싱됩니다. JSON 인코딩을 원하면 명시 적으로 지정해야합니다. 이와 같이 :

$.ajax({ 
    type: "POST", 
    url: 'http://localhost:9090/request', 
    data: JSON.stringify({type: 'add-request', val1: 12, val2: 50}), 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: function(data){ 
    console.log(data); 
}); 
+0

정확합니다. 이 시점을 지나면 다른 문제도 발생했습니다. 즉, 위와 같이 contentType을 설정하면 어떻게 든 링 미들웨어에 도달하지 못했습니다. 이것은 내가 stringify()하더라도 내 요청이 이제는 전혀 파싱되지 않는다는 것을 의미합니다. 링과 매우 흡사 한 커스텀 미들웨어와 함께 위의 작업을 끝내 었습니다. 어쨌든 내가하고 싶었던 다른 프로세싱이 있었기 때문에 이것은 잘 작동합니다. – user1020853