2016-08-02 9 views
0

Bei meinem website.com/v2/bridge/:locationId/process Endpunkt sieht die eingehenden req.body wie folgt aus:Express - Conditional Routing

{ 
    choice: 'a', 
    data: [ 
    { 
     ... 
    }, 
    ... 
    ] 
} 

ich eine bestimmte Route zugreifen möchten, je nachdem, was der Wert von req.body.choice ist. Wenn req.body.choice === 'a' dann möchte ich weitergehen zu website.com/v2/bridge/:locationId/process/choiceA mit dem gleichen req weitergegeben werden.

Ich weiß nicht, welche Middleware ich verwenden muss, um das zu erreichen. Ich weiß nicht, ob das überhaupt möglich ist.

Meine extrem vereinfacht Routen:

// website.com/v2/bridge 
const proc = require('./process'); 

router.use('/:locationId/process', proc); 

module.exports = router; 




// website.com/v2/bridge/56/process 
router.use(function (req, res, next) { 
    // ????????????????????????? 

    next(); 
}); 

const choiceA = require('./choice-a'); 
const choiceB = require('./choice-b'); 

router.use('/choice-a', choiceA); 
router.use('/choice-b', choiceB); 

module.exports = router; 





// website.com/v2/bridge/56/process/choice-a 
router.post('/', function (req, res) { 
    res.send('I got here.'); 

    return; 
}); 

module.exports = router; 

Was Middleware-Funktion muss ich sind meine Anfrage bedingt Weg? Ich versuche, eine riesige Funktion mit if-Anweisungen zu vermeiden, die verschiedene Dinge gemäß dem Wert von req.body.choice verarbeiten.

Antwort

3

Dies wird für Sie wenig komplizierter ... geben eine es it'will tun, um die Anforderung an den Endpunkt Sie wollen

+0

ich nicht ändern konnte 'req.path

router.use(function (req, res, next) { req.path = "/" + "choice-"+req.body.choice req.url = "/" + "choice-"+req.body.choice next(); }); 

jetzt versuchen ', aber ich konnte' req.url' neu zuweisen und das funktionierte perfekt für mich. – Jacob

+0

Gute Arbeit, das hat mir sehr geholfen. –