2016-06-09 8 views
0

nodejs에서 두 개의 매개 변수를 가져오고 싶지만 아래 매개 변수를 정의 할 때 문제가 발생하여 해결할 수 없습니다. 내 코드는 라우팅을 위해 다음과 같습니다.Nodejs 여러 매개 변수가 잘 작동하지 않음

app.use('/api/upcomingEvents/:trader/:id', require('./api/upcomingEvent')); 
/* ther are inside of upocomingEvent/index.js */ 
var express = require('express'); 
var controller = require('./upcomingEvent.controller'); 
var router = express.Router(); 
router.get('/:trader/:id', controller.index); 

정의 된 라우팅에 따라 요청을 보내면 바로 첫 번째 매개 변수가됩니다. 이 같은이 경로를 명시 적 매개 변수의

http://www.sitename.com/api/upcomingEvents/firstTrader/1 

{상인 : 1, ID : 정의되지 않은} 예를 들어 :

http://www.sitename.com/api/upcomingEvents/blablabla/firstTrader/1 

그것은 같은 매개 변수를 반환

이 같은 경로를 변경하는 경우 내가 원한다 : {상인 : 'firstTrader', id : 1}

이 문제를 어떻게 해결할 수 있습니까?

API/UpcomingEvent /하는 index.js :

var express = require('express'); 
var controller = require('./upcomingEvent.controller'); 

var router = express.Router(); 

router.get('/:trader', controller.index); 
router.get('/:trader/:id', controller.index); 
router.post('/:trader', controller.index); 
router.post('/:trader/:id', controller.index); 
module.exports = router; 

API/upcomingEvent/upcomingEvent.controller.js :

'use strict'; 
    // Gets a list of UpcomingEvents 
exports.index = function(req, res) { 
    console.log(req.params); 
    res.send(200,"ok!"); return; 
}; 
+1

주 './api/upcomingEvent' 코드입니다. –

+0

안녕하세요 @MukeshSharma도 공유했습니다. –

+1

이 특정 경로의/api/upcomingEvents/: trader/: id에 대한 미들웨어를 만든 다음 동일한 변수로 다른 경로를 지정했습니다. 왜 정확히 한거야? –

답변

2

api/upcomingEvent.js에서, 다시 동일한 매개 변수를 선언한다. 본질적으로, 당신이 경로를 만드는 것은이 일치하도록 :

/api/upcomingEvents/:trader/:id/:trader 
/api/upcomingEvents/:trader/:id/:trader/:id 

대신이 시도 : :id 이후

// app.js 
app.use('/api/upcomingEvents', require('./api/upcomingEvent')); 

// api/upcomingEvent.js 
router.get ('/:trader',  controller.index); 
router.get ('/:trader/:id', controller.index); 
router.post('/:trader',  controller.index); 
router.post('/:trader/:id', controller.index); 

는 선택 사항입니다, 당신도 해당이 단축 될 수 있습니다 :

router.get ('/:trader/:id?', controller.index); 
router.post('/:trader/:id?', controller.index); 
+0

'mergeParams' 옵션 솔루션은 4.5.0+ 버전에서만 작동하는 것 같습니다. 다른 솔루션은 매개 변수 이름 만 변경합니까? –

+1

@IlkerKorkut 예'/ : trader'를'upcomingEvent.js'로 완전히 옮기는 것이 더 좋을 것이라고 생각했습니다. 더 이상 mergeParams를 설정할 필요가 없습니다. – robertklep

+0

@robertklep 네가 맞다. 고맙다. 훌륭한 작품이다. –

관련 문제