如何从clojurescript中调用node.js模块中的javascript?

时间:2016-01-03 03:49:13

标签: node.js clojurescript

我希望使用ClojureScript中的Coinbase Bitcoin Exchange node.js API

目标是在页面上复制第一个javascript示例:

var CoinbaseExchange = require('coinbase-exchange');
var publicClient = new CoinbaseExchange.PublicClient();

但在我的以下代码中,我首先尝试访问PublicClient

(ns plutus.core
  (:require
     [cljs.nodejs :as nodejs]))

(def coinb (nodejs/require "coinbase-exchange"))
(nodejs/enable-util-print!)

(defn -main [& args]
  (def pc (js/PublicClient.)))
  (println pc))

(set! *main-cli-fn* -main)

这会抛出一个ReferenceError: PublicClient is not defined,虽然我也尝试过(以及类似的变化):

  • (def pc (. coinb (PublicClient)))
  • (def pc (.PublicClient coinb))
  • (def pc (:PublicClient coinb))

所有这些都因打印nil而失败。我已经非常仔细地研究了this article任何相关的例子,但我对使用node.js如何影响事物的命名感到困惑,如果有的话。

2 个答案:

答案 0 :(得分:1)

真的不是命名问题,更多的是关于如何在对象中使用new嵌套属性。不幸的是,您无法在事后获得PublicClient然后new的引用。

(new (.-PublicClient coinb))

即使(.-PublicClient coinb)返回一个函数,它也不起作用。

你需要在ClojureScript中使用它的点符号指向函数的位置:

(new coinb.PublicClient)
;; OR, more idiomatic
(coinb.PublicClient.)

那可以给你你想要的东西。

答案 1 :(得分:0)

还有人看到这个吗?

> ((.-getProducts (cb.PublicClient.)) (fn [_ _ _] nil))
#object[TypeError TypeError: self.makeRelativeURI is not a function]