나는 링 + compojure 응용 프로그램을 가지고 있으며 경로가 웹 응용 프로그램의 일부인지 아니면 api의 일부인지에 따라 다른 미들웨어를 적용하려고합니다 (이는 json 기반).Ring 및 Compojure를 사용하여 서로 다른 미들웨어로 앱 및 API 경로 제공
스택 오버플로 및 기타 포럼에서이 질문에 대한 답변을 찾았지만 이러한 대답은 제가 사용 해본 솔루션보다 복잡해 보입니다. 나는 내가 그것을하고있는 방법과 나의 해결책에서 누락되었을 수있는 것에 결점이 있는지 알고 싶었다. 내가하는 일의 매우 단순화 된 버전은
(defroutes app-routes
(GET "/" [req] dump-req)
(route/not-found "Not Found"))
(defroutes api-routes
(GET "/api" [req] dump-req))
(def app
(routes (-> api-routes
(wrap-defaults api-defaults))
(-> app-routes
(wrap-defaults site-defaults))))
여기에 나와있는 것보다 더 많은 미들웨어가 있음에 유의하십시오.
내가 만난 유일한 제한점은 app-routes에 발견되지 않은 경로가 있기 때문에 마지막으로 올 필요가 있거나 API 경로를 찾기 전에 트리거된다는 것입니다.
이것은 내가 찾은 다른 솔루션보다 간단하고 유연합니다. ring.middleware.conditional과 같은 추가 조건부 미들웨어를 사용하거나 더 복잡한 라우팅 정의가있는 곳이있는 것처럼 보입니다. 추가 defroutes 레이어 및 "*"등 defroutes을 정의해야 할 필요
내가 여기에 뭔가 미묘한 것 같아요 그리고 내 접근 방식이 작동하는 동안 그것은 예기치 않은 동작이나 일부 상황에서 결과가 발생할 것입니다
여기에'routes' 란 무엇입니까? -got it : http : //weavejester.github. io/compojure/compojure.core.html # var-routes –