首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nest Noir路由

Nest Noir路由
EN

Stack Overflow用户
提问于 2012-09-28 04:08:56
回答 1查看 106关注 0票数 2

我有一个基于特定数据存储生成密钥的应用程序。如果有7个这样的路由和5个应用程序,那么我的event.clj中将总共有35个路由(或者,如果拆分,则在5个文件中有7个/文件)。我想动态地做以下事情:

代码语言:javascript
复制
(defnested "/:app-name"
    (defpage "/generate/event" {:keys [app-name event-name time] :as key-map}
     (response/json
      {:key (key-model/build-key :event key-map)}))

    (defpage "/generate/event/unread" {:keys [app-name event-name] :as key-map}
     (response/json
      {:key (key-model/build-key :unread-for-event key-map)}))
)

这样,我就可以编写每条路由一次,然后传递应用程序名称(而不是在查询参数中传递它,这是有效的,但不是很RESTful。

奖金

如何动态调用名称空间,使key-model/build-key成为基于应用程序名称的redis-model/build-keyriak-model/build-key调用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-28 20:01:33

我不确定我是否理解了这个问题,但这不是你要找的吗:

代码语言:javascript
复制
(defpage "/:app-name/generate/event" {:keys [app-name event-name time] :as key-map}
    (response/json
      {:key (key-model/build-key :event key-map)}))

(defpage "/:app-name/generate/event/unread" {:keys [app-name event-name] :as key-map}
     (response/json
      {:key (key-model/build-key :unread-for-event key-map)}))

奖金

我还将采用一种简单的解决方案,即使用一个包含函数的map来生成密钥,如下所示:

代码语言:javascript
复制
(def key-gen {"redis" redis-model/build-key
       "riak" riak/build-key})

(response/json
      {:key ((get key-gen app-name) :event key-map)})

如果你真的想要动态地找到build-key函数,你可以这样做:

代码语言:javascript
复制
(defn build-key [app-name] 
   (let [the-ns (symbol (str app-name "-model"))] 
      (require the-ns) 
      (ns-resolve the-ns 'build-key)))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12629265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档