2017-03-28 4 views
2

Ich mache eine Pause api. Und ich habe mehrere optionale Parameter. Hier ist die Lösung, die ich getroffen habe, aber gibt es eine andere Lösung? Die URL kannWie url + multiple otpional Abfrageparameter im Knoten behandelt werden?

www.myurl.com/ 

oder

www.myurl.com/faqid/22 

oder

www.myurl.com/faqid/22/locale/english 

Hier ist meine Implementierung ist

var getFaq = (req, res) => { 
    let faqDetails = FAQ.map(obj => obj);//it is a mock json for now 
    faqDetails = req.params.faqid ? faqDetails.filter(obj => obj.id == req.params.faqid) : faqDetails; 
    faqDetails = req.params.topic ? faqDetails.filter(obj => obj.topic == req.params.topic) : faqDetails; 
    return res.status(200).send(faqDetails); 
} 
router.get('/:faqid/topic/:topic', getFaq) 
router.get('/:faqid', getFaq) 
router.get('/', getFaq) 

Antwort

1

Ich würde vorschlagen, Sie sollten versuchen, Ihre App Routen zu organisieren im so dass die Methoden dem Prinzip der einfachen Verantwortlichkeit folgen, bei dem jede Funktion, die Sie schreiben, genau eine Sache tun sollte. Es sollte ein klar definiertes Ziel haben. In den oben genannten getFaq scheint so viele Dinge zu tun.

Sie würden im Idealfall wollen sie getAll(), getSingle() und getTopic() Funktionen aufzuteilen und dann jeweils an den zuständigen Route delegieren:

router.get('/:faqid/topic/:topic', getTopic) 
router.get('/:faqid', getSingle) 
router.get('/', getAll) 

Auf diese Weise ist es einfacher, Unit-Test und zu debuggen.

Verwandte Themen