【问题标题】:pass date from clojure server to cljs frontend via transit format通过传输格式将日期从 clojure 服务器传递到 cljs 前端
【发布时间】:2016-09-28 08:12:01
【问题描述】:

clojure 服务器从 mysql 数据库中读取日期时间列。通过使用 jdbc,此操作通常会返回 java.sql.Timestamp 的实例

我通过transit 格式将此数据带到前端。可以将日期强制转换为时间戳并在前端对其进行解析以进行进一步处理,例如图书馆 cljs-time。这是要走的路还是有其他更方便的方法?

【问题讨论】:

  • 如果您使用的是 JDBC,您应该能够在查询时将其自动转换为 java.until.Date(或您选择的其他类),这会解决您的问题吗?
  • 哦,我现在明白了。 java.util.Date 是一个传输类型。好点子。但是在客户端会强制执行什么操作呢?
  • 回答了最后一个问题。当使用 java.util.Date 时,它​​将成为前端的 js/Date 实例。但是,如果有人知道从 jdbc/honeysql 查询中接收 java.util.Date 的简洁方法,我仍然很想听听。
  • 不将其作为答案发布,但您所要做的就是在 Timestamp 上实现 IResultSetReadColumn (clojure.github.io/java.jdbc/#clojure.java.jdbc/…) 协议。 Luminus 中有一个例子。

标签: mysql jdbc clojure clojurescript transit


【解决方案1】:

您可以在 transit-cljs here 中查看默认类型映射。默认情况下,Transit time 值映射到 JavaScript Dates。我更喜欢将日期映射到goog.Date.UtcDateTimedocs 关于扩展 Transit Read 和 Write 处理程序,但这是我们使用的:

(def transit-readers
  {:handlers
   {"m" (transit/read-handler (fn [s] (UtcDateTime.fromTimestamp s)))
    "u" uuid}})

(def transit-writers
  {:handlers
   {UtcDateTime (transit/write-handler
                  (constantly "m")
                  (fn [v] (.getTime v))
                  (fn [v] (str (.getTime v))))}})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多