重新路由网址| Nodejs |快速

时间:2016-10-03 13:27:34

标签: javascript node.js redirect express

我想根据请求中的查询参数将传入请求重定向到不同的端点。

例如,

http://localhost:9000/?category=xyz&param1=...&param2=...

category值可以是[abc,ijk,pqr,xyz]之一。

根据category值,请求应重定向到“/ abc”,“/ ijk”,“/ pqr”,“/ xyz”保留剩余参数之一。 < / p>

因此,上述请求应成为/xyz/?param1=...&param2=...

我是Nodejs / express的新手,我认为最好根据category值创建不同的路由来模块化代码。

处理此类案件的理想方法是什么?

2 个答案:

答案 0 :(得分:0)

为每个值[abc, ijk, pqr, xyz]创建一个路径。为了处理不同的查询参数(?category=xyz),创建一个转换请求URL的中间件:

app.use(function(req, res, next) {
  // adding category in the url path will redirect to the 
  // correct route after calling next function
  req.url = "/" + req.query.category;
  next();
});

假设它是GET请求,则类别路由将是:

app.get('/abc', function(req, res) {
  //do stuff for 'abc' category
  res.send('abc');
});

app.get('/ijk', function(req, res) {
  //do stuff for 'ijk' category
  res.send('ijk');
});

app.get('/pqr', function(req, res) {
  //do stuff for 'pqr' category
  res.send('pqr');
});

app.get('/xyz', function(req, res) {
  //do stuff for 'xyz' category
  res.send('xyz');
});

请注意,中间件会为所有请求编辑网址,按请求网址添加路径app.use("/path", function(req,res,next)...或在其中添加一些逻辑进行过滤。

答案 1 :(得分:0)

看起来像旧的“首页控制器”模式:

app.get('/', routeByParameter)
function routeByParameter(req, res){
  var category  = req.params.category
  if(category === 'abc'){
    return abcRoute(req, res)
  }
  else if(category === 'xyz'){
    return xyzRoute(req, res)
  }
}
function abcRoute(req, res){
  req.send('abc')
}

或使用“首页术语”

app.get('/', dispatcher)
function dispatcher(req, res){
  var category  = req.params.category
  if(category === 'abc'){
    return viewAbc(req, res)
  }
  else if(category === 'xyz'){
    return viewXyz(req, res)
  }
}
function viewAbc(req, res){
  req.send('abc')
}

或者,您可以在中间件中进入并修改或创建自定义路由调度程序......

相关问题