4

我正在实现从 HTML5 应用程序到 Datomic 数据库的基本端到端功能。第一个调用端口是让客户端直接对 Datomic REST API ( http://docs.datomic.com/rest.html ) 进行 AJAX 调用。

这种方法需要解决的问题是数据在 EDN 中返回,而客户端应用程序想要使用 JSON。

我可以看到有可能在客户端上使用 Javascript 来执行此操作,例如,使用一些库代码来翻译 EDN(例如,我找到了 jsedn - https://www.npmjs.com/package/jsedn )

有没有人有使用 Javascript 做这样的事情的经验?或者,是否更普遍接受 EDN 到 JSON 应该在 Clojure/Clojurescript 领域(客户端或服务器端)中完成,例如http://swannodette.github.io/2014/07/26/transit- -clojurescript/

谢谢

菲尔

[编辑 04-Mar-15 - 澄清:通过客户端 Clojurescript,我正在考虑使用将 EDN 转换为 JSON 的 CLJS 代码,将其编译为 JS,然后将其用作客户端库。]

4

2 回答 2

3

没有反对您提到的 jsedn 项目,但它在两年内没有看到提交,并且有几个长期存在的问题/公关没有得到解决:我会厌倦依赖它。

您可以通过创建一个新的 clojurescript 项目和^:export-ing 一个解析传入 edn 并吐出 JS 对象的单个函数来轻松实现您的目标(因为没有充分的理由反序列化 edn,将其序列化为 JSON,然后再次反序列化它!):

(ns app.edn (:require [cljs.reader :as r]))

(defn ^:export read-edn [s]
  (let [data (r/read-string s)]
    ; Log/prettify for JS/whatever
    (clj->js data)))

编译它,在你的 JS 中 require 文件,它会在app.edn.read_edn().

于 2015-03-05T12:28:03.223 回答
1

如评论中所述,这是我为实施@SLD 正确答案而采取的完整步骤,以防任何人都可以从细节中受益。

1)从上面的答案中获取 cljs 代码。

2) 创建一个 project.clj 文件以在构建中使用。我发现我必须使用该选项

:优化:空白

这样生成的代码对我来说是有意义的(并且会在 RequireJS 中加载)

3) 使用命令

lein cljsbuild 一次

构建js文件。控制台输出会显示主要生成文件的名称,也就是project.clj中指定的那个

4)(如果使用RequireJS)将生成的文件添加到RequireJS配置的“路径”中

5)(如果使用RequireJS)为生成的文件添加一个“shim”条目,因为它不是一个模块。要获得正确的导出值,请查看从 3) 生成的 js 文件并查看正在导出的全局对象。将该全局对象的名称添加为 shim 的“导出”值。

于 2015-03-17T13:58:41.787 回答