0

我通过以下命令使用 Luminus 创建了一个项目:

lein new luminus myapp +mysql +kee-frame +swagger +oauth +kibit

在这个项目中,我创建了一个 API 调用,它调用一个函数来从磁盘读取文件。API 调用(部分):

{:get {:summary "Returns a file from disk to show in GUI"
       :responses {200 {:body ::val/my-file}}
       :handler (constantly
                  {:status 200
                   :body (gui/get-file)})}}

函数 get-file 位于 myapp.db.gui 相关的命名空间中,如下所示:

(defn get-file
  []
  (log/info "Trying to retrieve file")
  (read-string (slurp "file.edn")))

当我启动 REPL 并输入命令(mount/start)时,应用程序正常启动,我可以调用 API 来查看文件的内容。文件位置现在位于我项目的根目录中。但是,如果我将文件放在 resources/myapp 中并将 slurp 命令更改为(slurp "myapp/file.edn")or (slurp "resources/myapp/file.edn"),则运行后会出现错误(mount/start)并且应用程序未启动。如果我尝试读取具有绝对路径的文件,我会得到同样的错误(slurp "C:\\Development\\file.edn")

2020-04-30 12:02:03,512 [nREPL-session-88d31cf8-b119-4a87-901d-3eee1eb61cc7] INFO  myapp.env --=[myapp started successfully using the development profile]=-
2020-04-30 12:02:03,607 [nREPL-session-88d31cf8-b119-4a87-901d-3eee1eb61cc7] INFO  myapp.db.gui-related - Trying to retrieve file    
Execution error (ConnectException) at java.net.DualStackPlainSocketImpl/connect0 (DualStackPlainSocketImpl.java:-2).
    Connection refused: connect

在这个项目中,我将有很多“配置”文件要读取,我希望能够将它们放在我项目根目录中的一个或多个子文件夹中。除此之外,还有另一个文件要读入,它位于我的应用程序的文件夹结构之外。

我怎样才能阅读这些文件?

4

2 回答 2

0

使用 java,您应该始终使用正斜杠;也就是说(slurp "C:/Development/file.edn"),我认为(我没有窗户)。

从相对路径读取也应该有效;您可以检查 REPL 的当前工作目录(System/getProperty "user.dir")并验证路径是否正确。

于 2020-04-30T15:47:49.323 回答
0

对不起。错误与 slurp 功能无关。在另一个函数中,我仍然有一个硬编码的 API 调用的 URL,这已经改变了。因此我得到了这个

Execution error (ConnectException) at java.net.DualStackPlainSocketImpl/connect0 (DualStackPlainSocketImpl.java:-2).
Connection refused: connect

它与读取文件无关,而是尝试访问 localhost:5001 而不是 localhost:5000。谢谢你的支持

于 2020-04-30T17:25:53.083 回答