如何将javascript集成到Clojure / Ring Web应用程序中?

时间:2011-03-15 19:16:57

标签: javascript clojure ring

如何将Javascript资源最佳地集成到环形应用程序中?

具体做法是:

  • 我们将把.js文件放在哪里?
  • 如何以及在何处设置单元测试?
  • 为跨越客户端和服务器端的功能设置验收测试的最佳方法是什么?

对于环形应用程序的javascript有什么最佳做法吗?一个可能的答案是完全单独开发客户端和服务器端,基本上将所有内容分成两个独立的项目,但我对这个想法并不完全满意。

(我也知道clojurescript,虽然我主要考虑的是javscript代码,这些代码都是用javascript编写的。)

4 个答案:

答案 0 :(得分:1)

Ring支持直接从文件夹(ring.middleware.filering.middleware.static这是我将使用的)或jar / war中的资源提供文件。您最好的选择是使用这些机制来提供静态(javascript /图像)内容。如果您可以自由地执行此操作,我将放置一条类似于此路径的路径,以便从/static/这样的文件夹中提供所有HTTP请求:

(def *route*
    (ring/wrap-static "c:/statics/" ["/static/"]))

一旦你知道如何处理静态资源的请求(比如javascript资源),它就像PHP或ASP一样。

另一种方法是按照正常情况定义资源路由,然后在“catch-all”(通常类似于此(ring/GET * request (handle-static-request request))路由)中,使用静态请求处理任何剩余的未服务请求。

答案 1 :(得分:0)

要快速入门,在clojure / ring开发环境中开始提供静态文件的最简单方法可能是使用ring.util.response / file-response。

如果您使用小胡子,可以在路线列表的末尾添加这样的路线(作为直通路线):

[&] (fn [req] (file-response (req :uri) {:root "resources/public"}))

它将选择任何路线并尝试在" [proj-root] / resources / public"下找到与提供的uri相匹配的文件。 。目录

在您的html脚本标记中,您可以使用,例如src="/js/all.js",然后确保您拥有这样的文件" [proj-root] / resources / public / js / all。 JS"

请参阅http://mmcgrana.github.com/ring/ring.util.response.html

答案 2 :(得分:-1)

我会选择“彻底分离关注点”的路径。您的服务器端clojure代码只会公开json服务,您的javascript将查询数据并将其附加到html。 Clojure使您可以轻松创建此类服务并将其数据结构转换为json。 然而,这种方法有它的缺点,你将严重依赖于javascript。

答案 3 :(得分:-6)

我不是一个clojure网络专家,但我会试一试。

我认为Ring与你使用的模板语言没什么关系。

模板语言

  • Enlive:Proberly seperat所有东西(不是一个sepred项目)并与enlive一起拉
  • 舰队:你是如何用PHP或其他东西做的。
  • 打嗝:用内联html编写你的clojure函数,js只有sepret文件中的大js librarys。

我真的不能谈论测试。