首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对yada中每个路由请求的准备功能

对yada中每个路由请求的准备功能
EN

Stack Overflow用户
提问于 2018-07-27 11:51:19
回答 1查看 134关注 0票数 1

目前,我正在与Yada作为网络自由发挥。现在,我想在路由被击中之前执行一些函数。

我已经测试过的方法:-将当前资源包装为子资源,但是swagger-doc没有找到资源--使用了一个前置拦截器,但是docu在我遇到错误时还没有完成。

我的代码:

代码语言:javascript
复制
(ns all-mighty.namespace
    (:require [yada.yada :refer [handler listener resource as-resource]]
              [yada.swagger :refer [swaggered]])

(defn resources []
[""
 (swaggered
     [""
      [
       (cool-route)
       ]]
     {:info     {:title       "Hello You!"
                 :version     "1.0"
                 :description "It's something"}
      :basePath ""}
     )])

(defn cool-route []
["/cool" (resource {
                   :description "Returns somethign cool"
                   :produces    "application/json"
                   :methods     {:get {:response cool-response}}}
                  )])

(defn cool-response [ctx]
(-> (:response ctx)
    (assoc :status 200)
    (assoc :body {:state :up}))

是的,我会重新考虑后一种资源;-)

有人有主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-27 14:11:44

我使用append-interceptor的方式

代码语言:javascript
复制
(ns all-mighty.namespace
  (:require
   [yada.handler :refer [append-interceptor]]
   [yada.interceptors :as i]
   [yada.swagger :refer [swaggered]]
   [yada.yada :refer [handler listener resource as-resource]]))

(defn cool-response [ctx]
  {:state :up
   :my/value (get ctx :my/value)})

(defn my-cool-interceptor [ctx]
  (assoc ctx :my/value 10))

(defn my-cool-resource
  [model]
  (-> model
   ;; you have to provide an interception chain, here we use the default one
   (assoc :interceptor-chain yada.yada/default-interceptor-chain)
   resource
   ;; here we append our interceptor after the request body has been processed
   (append-interceptor i/process-request-body my-cool-interceptor)))

(defn cool-route []
  ["/cool" (my-cool-resource {:description "Returns somethign cool"
                              :produces    "application/json"
                              :methods     {:get {:response cool-response}}})])

(defn routes []
  [""
   (swaggered
    [""
     [
      (cool-route)
      ]]
    {:info     {:title       "Hello You!"
                :version     "1.0"
                :description "It's something"}
     :basePath ""}
    )])

(comment
  (def l (listener (routes) {:port 1337}))
  ((:close l))
  )

因此,对于/cool下的每个资源,您可以使用my-cool-resource函数自动添加所需的拦截器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51557357

复制
相关文章

相似问题

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