Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript express.js中基于请求参数的动态路由_Javascript_Node.js_Express_Routing_Dynamic Routing - Fatal编程技术网

Javascript express.js中基于请求参数的动态路由

Javascript express.js中基于请求参数的动态路由,javascript,node.js,express,routing,dynamic-routing,Javascript,Node.js,Express,Routing,Dynamic Routing,我正在使用expressJS构建一个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)

我正在使用expressJS构建一个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的特定函数,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
}