다음은 내 경로 코드입니다.
app.get('/server/lead/get/:id?', leadCtrl.get);
app.get('/server/lead/filter/:filterQuery', leadCtrl.get);
위에서 볼 수 있듯이 동일한 컨트롤러 방법에 액세스하기 위해 다른 경로를 사용하고 있습니다 leadCtrl.get
.
이제 나는 route와 같은 것을 원합니다 app.get('/server/lead/get/:id?:filter?', leadCtrl.get);
. 그래서, 나는 PARAMS 중 하나를 얻을 수 있습니다 req.params.id
또는 req.params.filter
그러나 한 번에 한합니다.
질문에서 질문 한 내용을 설명하는 형식으로는 불가능합니다.
이제 route app.get ( '/ server / lead / get / : id? : filter?', leadCtrl.get);과 같은 것을 원합니다. 따라서 req.params.id 또는 req.params.filter 매개 변수를 가져올 수 있지만 한 번에 하나씩 만 가져올 수 있습니다.
라우터는이 두 매개 변수를 구별 할 방법이 없습니다. 요청 /server/lead/get/X
이 있으면 X는 무엇입니까? 필터 또는 ID?
여기에 몇 가지 해결책이 있습니다.
이전처럼 두 가지 경로를 계속 사용할 수 있습니다.
Robert가 주석에서 설명한대로 두 경우 모두에 공통 매개 변수를 사용할 수 있습니다.
또는 이름이 지정된 쿼리 매개 변수와 같은 사용 사례에 대한 완벽한 솔루션으로 보이는 것을 사용할 수 있습니다. 경로 /server/lead/get
를 사용하고 쿼리 매개 변수를 사용하여 ID와 필터를 전달할 수 있습니다.
예제 URL :
/server/lead/get?id=xxx
/server/lead/get?filterQuery=xxx
핸들러에서 한 번에 두 가지 중 하나만 다음과 같이 설정되어 있는지 확인하면됩니다.
if (req.query.id && req.query.filterQuery) {
// respond with error
}
app.get('/server/lead/get/:id?')
경로 가있는 경우 두 가지를 혼합 할 수도 있습니다. 경로에 ID를 포함하고 쿼리 매개 변수로 filterQuery를 사용할 수 있습니다. 이제 URL은 다음과 같습니다.
/server/lead/get/xxx
(ID 용)/server/lead/get?filterQuery=xxx
(필터 용)자세한 내용은 http://expressjs.com/en/api.html#req.query를 참조하십시오.
몇 가지 REST 규칙 을 따르는 경우 다음을 사용할 수 있습니다.
이렇게하면 다음에 액세스 할 때 항상 알 수 있습니다.
/server/lead/xxx
- 다음 그것의 하나의 ID와 객체 = XXX/server/lead
-다음 은 모든 개체 의 목록 입니다./server/lead?filterQuery=xxx
- 쿼리와 일치하는 개체 목록 입니다.자신의 것을 발명하는 대신 이와 같은 것에 대한 REST 규칙을 따르는 경우 경로와 핸들러를 설계하는 것이 훨씬 쉬울 것이고 다른 사람들이 시스템을 사용하는 것이 훨씬 더 쉬울 것입니다.
REST에서 일반적으로 사용 되는 대신 복수형 을 사용할 수도 있습니다 . 그렇게 하면 목록이고 그 요소 중 하나 인 것이 더 분명해질 것 입니다./server/leads
/server/lead
leads
leads/id
자세한 내용은 다음을 참조하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다