我在这个 clojure 项目中的命名空间声明有什么问题?

问题描述 投票:0回答:1

我正在使用 Clojure 和 leinigen 构建后端项目。

这是我的文件的简化版本:

(ns simplified...
  (:require [ring.middleware.json :refer [wrap-json-response]]
            [ring.util.response :refer [response]]
            [ring.middleware.json :refer [wrap-json-body]]
            [ring.middleware.defaults :refer [wrap-defaults]]
            [ring.adapter.jetty :as jetty]))

(defroutes rest-api-routes
  (POST "/api" req
        
        (clojure.pprint/pprint req)
        "hello"))

(defn import-atb
  [request-id tenant-id]
  (let [trial-balance-report  (middleware/wrap-json-body rest-api-routes {:keywords? true})])
  trial-balance-report)

完成

lein clean
之后,当我运行
lein repl
时,我得到:

#error {
 :cause No such namespace: middleware

我的文件有什么问题吗?

clojure namespaces middleware leiningen ring
1个回答
0
投票

快速修复方法是将

middleware/wrap-json-body
替换为
wrap-json-body
,因为它已被引用到命名空间中。

require
可以选择
:refer
选项。您在此处使用的
:refer
选项允许您直接从您自己的命名空间引用该命名空间的 var。
:as
选项将允许您为自己的命名空间添加别名。例如,您可以
(:require [ring.middleware.json :as ring-json])
,然后在命名空间中引用
ring-json/wrap-json-body

© www.soinside.com 2019 - 2024. All rights reserved.