2012-02-28 2 views
1

나는 REST를 통해 노출시키고있는 Clojure 서비스를 가지고있다. 다음과 같이 정의 된 페이지가 있습니다 :노아의 슬러그에는 어떤 캐릭터가 허용됩니까?

(defpage "/package_versions/:id" {:keys [id]} 
    (do 
    (println "ID: " id) 
    (if-let [pv (pv/fetch-one (db/keyspace) id)] 
     (response/json pv) 
     (response/status 404 nil)))) 

ID는 어떤 문자가 허용됩니까? 슬러그 1-2-3, 1 | 2 | 3, 1_2_3 모두 작동하지만 1.2.3은 작동하지 않습니다. 포함하는 슬러그를 만드는 방법이 있습니까? 작업? 노아 노선에서 허용되는 문자는 무엇입니까? 어떤 코드가이 동작을 담당합니까 : noir, ring, compojure?

답변

1

Clout test cases을 살펴보십시오.

테스트에 사용 된 슬러그는 실제로 특수 문자가 없으므로 어떤 문자가 유효한지 알 수 없지만 파일의 끝에는 아마도 사용자 지정 라우트 일치자를 정의하는 방법의 예가 있습니다 원한다면 도트를 맞추는 데 사용할 수 있습니다.

노어에 맞춤 라우트 일치 프로그램을 noir.core/compojure-route 또는 noir.core/custom-handler으로 연결할 수 있습니다.

또한 문자가 포함 된 테스트가 있습니다 (예 : /foo.txt 같은 URL과 일치하는 "/foo.:ext인데, 버그가 아니며 슬러그에 점을 허용하지 않으면 놀랄 일이 아닙니다.

+0

그래서 당신의 권리, 나는 또한 CLJ 그룹 https://groups.google.com/forum/?fromgroups#!topic/clj-noir/KbrxJrafUrU 에이 문제를 제기 그리고 그들은이 날을 언급 가이드 : https://github.com/weavejester/compojure/wiki/Routes-In-Detail – MrEvil

+0

해당 문서의 관련 부분은 다음과 같습니다. ': id 부분은 다음 "/"까지의 하위 경로와 일치하거나 ".". 또한 하위 경로 일치 인라인에 대한 맞춤 정규식을 지정할 수 있다고 명시되어 있습니다 (예 : '(defpage [ "/ user/: id", : id # "[0-9] +"] ...)'노아의 경우. – liwp

0

Compojure가 사용하는 라이브러리 인 clout이어야합니다. route-compile을 사용하여 다른 matcher를 설정하는 예를 보려면 wakeful을 참조하십시오.

관련 문제