基于express.js中请求参数的dynamic路由

我正在使用expressJS构build一个RESTful API,在我的控制器中,我有几个函数,如Chall_1,Chall_2,…

exports.validateChall_1 = function(res) { //logic res.json(1); }; exports.validateChall_2 = function(res) { res.json(2); }; exports.validateChall_3 = function(res) { res.json(3); }; 

在我的router.js我想路由URL到一个特定的函数基于challId这是一个参数在URL中

 'use strict'; module.exports = function(app) { var jsvalidator = require('../controllers/jsvalidatorController'); app.route('/chall/:challId') .get(/*jsvalidator.validateChall_ + req.params.challId*/); }; 

是否有可能根据challId参数直接路由到特定的函数?

你可以做类似的事情

 app.route('/chall/:challId') .get(function (req, res, next) { switch (req.params.challId) { case 1: ctrl.validate_chall1(req, res, next); break; case 2: ctrl.validate_chall2(); break; default: next() //it should continue to 404 route break; } }); 

但我认为这样做更好地保持路线清洁

 app.route('/chall/challId/validate') .get(ctrl.validate) //in ctrl function validate(req, res, next){ if(req.params.challId === 1) validate_ctrl1() //etc }