Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure中奇怪的布尔行为,表单数据中带有复选框_Clojure_Boolean_Compojure - Fatal编程技术网

Clojure中奇怪的布尔行为,表单数据中带有复选框

Clojure中奇怪的布尔行为,表单数据中带有复选框,clojure,boolean,compojure,Clojure,Boolean,Compojure,我正在使用AngularJS资源来基本上$.ajax一些表单数据 Post.put({user:$scope.getLoggedInUser(), action:"new"},{body:$scope.postBody, "public":$scope.postPublic}, function(post) { 表单上有一个名为public的复选框 我正在使用此函数将表单数据与URL中的参数合并: (defn get-params [request] (merge (:params req

我正在使用AngularJS资源来基本上$.ajax一些表单数据

Post.put({user:$scope.getLoggedInUser(), action:"new"},{body:$scope.postBody, "public":$scope.postPublic}, function(post) {
表单上有一个名为public的复选框

我正在使用此函数将表单数据与URL中的参数合并:

(defn get-params [request]
  (merge (:params request) (parse-string (slurp (request :body)) true)))
当我从路径的处理程序中打印LN时,例如,当选中复选框时,我得到一个很好的true:

(println (:public (get-params request)))
但是,当我将参数(即不是println)传递给控制器中与数据库对话的另一个函数时,我会在该函数的开头执行另一个println,取而代之的是nil

我试着把它当作

(read-string x)
(boolean (Boolean/valueOf x))
(Boolean/valueOf x)
无济于事

有一件事可能会导致这种情况,但我不知道为什么我要通过如下身份验证包装请求:

(auth? request #(create x y z))
其中create函数在数据库中创建一条记录

不管我做了什么,我都不能让它成为真的

编辑:更完整的代码

控制器

模型


不要打两次电话给get params。请求:body返回一个流,不能读取两次。

request:body是一个流对象。一次读到流,直到流结束,下一次读不到任何东西,这就是发生的事情
(defn auth? [request callback-true & [callback-false]]
  (println (callback-true))
  (let [login-response (auth/login request)]
    (if (and (not (string? login-response))
             login-response)
      (callback-true)
      (if callback-false 
        (callback-false)
        (json-response (str "{\"auth\":" login-response "}"), 401)))))

(defn create [user logged-in-user body public?]
  (if (= logged-in-user user)
    (json-response (post-view/single-post (post/create user body public?)))
    (json-response "{\"auth\":\"can't create post under different logged in user\"}" 401)))

(defroutes routes
  ....
  (PUT "/api/:user/new" request
       (println request)
       (auth? request
              #(create (:user (request :params))
                       (:user (request :session))
                       (:body (get-params request))
                       (:public (get-params request)))))
  ....
)
(defn create [username body public?]
  (println public?)
  (when-not (and 
              (str/blank? body)
              (str/blank? username))
  (let [user-id (:id (get-id-from-username username))
        new-post-id
        (:id 
            (sql/with-connection db
                (sql/insert-values :post
              [:usr_id :body :public] [user-id body (Boolean/valueOf public?)])))]
    (by-id new-post-id))))