2017-11-09 7 views
0

': name'매개 변수를 기반으로 데이터베이스에서 포인트를 반환하는 router.get ('/ : name', ...)을 추가하려고합니다.동일한 경로를 사용하는 여러 .get (...)

노선/

import express from 'express' 
import Points from '/path/models/points' 

let router = express.Router() 

router.get('/:session', (req, res) => { 
    Points.query({...}).fetchAll().then(point => { 
     //returns points based on sessionId 
    }) 
}) 

export default router 

나는 또 다른 '갔지'내가 '세션'에서 다른 매개 변수를 사용할 때 모두가 반환 정의되지 않은 추가하려고

을 points.js 원래 router.get 때문에 '세션'을 찾고 있습니다.

다른 매개 변수를 사용하는 'get'을 추가하는 방법이 있습니까?

+0

라우팅의 루트 수준에 매개 변수를 넣는 것은 좋지 않습니다. 그 이유는 거의 * anything *이 해당 매개 변수와 일치하기 때문입니다. 프로젝트 전반에서'/ sessions/: session'과 같은 경로를 재정의하면 문제가 사라질 것입니다. – Jaxx

답변

0

내 댓글에 최대 다음은

import express from 'express'; 
import Points from '/path/models/points'; 

let router = express.Router(); 

router.get('/sessions/:session', (req, res) => { 
    Points.query({...}).fetchAll().then(point => { 
    //returns points based on sessionId 
    }); 
}); 

router.get('/names/:name', (req, res) => { 
    .. actual code here .. 
}); 

export default router; 

것은 이제 정말이 쿼리에 대한 하나의 불가지론 진입 점을 가지고 주장하는 경우, 단일 경로를 사용하여 검색 할 실제 DB 쿼리를 사용할 수 있습니다 귀하의 불가 지한 매개 변수와 일치하는 DB의 session_idname 필드 다음과 같이하십시오 :

import express from 'express'; 
import Points from '/path/models/points'; 

let router = express.Router(); 

router.get('/:points', (req, res) => { 
    Points.query({...}).fetchAll().then(point => { 
    //returns points based on sessionId OR name 
    }); 
}); 

export default router; 

그러나 나는 여전히 루트 수준에서 매개 변수를 일치시키는 것이 끔찍한 생각이라고 생각합니다.

루트 수준에서 매개 변수를 동시에 검색하는 두 개의 경로가있는 경우 정의 된 첫 번째 경로는 들어오는 요청을 모두 수신하므로 두 번째 경로는 아무 것도받지 못합니다. 단지 :session 매개 변수를 :name 매개 변수 노드/표현하려면 둘 다 동일합니다. 즉, 모두 과 일치합니다.은 루트 슬래시 뒤에옵니다.

+0

감사합니다. 그냥 이걸 시도하고 효과가! – Wilson

+0

@ 윌슨 (Wilson) 원래의 솔루션을 사용하는 것이 최선의 방법이라고 생각하지만 대체 방법을 추가했습니다. 그리고 당신은 환영합니다;) – Jaxx