如何向node.js中的每个请求添加其他参数

时间:2014-11-29 11:21:07

标签: node.js express

我想为node.js应用的每个网址添加一个可选的引荐参数。我可以做到以下几点,但我正在考虑一种更有效/更优雅的方法来实现这一点,所以我的代码不会在不必要的时间内结束:

app.get('/product/:example/', function (req, res) {
  res.render('product.ejs', { product : product[req.param('example')] });
});

app.get('/product/:example/referrer/:user/', function (req, res) {
  // do referral stuff
  res.render('product.ejs', { product : product[req.param('example')] });
});

我正在考虑这样的事情(显然不起作用):

app.get('/product/:example/',  function (req, res) { ... });
app.get('/category/:example/', function (req, res) { ... });
// set up all GET requests ...

app.get('/*/referrer/:user/', function (req, res, next) {
  // do referral stuff
  req.next();
});

谢谢!

豪尔赫

编辑:感谢您的回复,mvuajua。我玩弄了它,我想出了以下内容。我希望这会对某人有所帮助:

app.use(function(req, res, next) {
  if (req.url.search('/referrer/') > -1) {
    res.redirect(req.url.substring(0, req.url.search('/referrer')));
    var referrer = req.url.substring(req.url.search('/referrer/')+10,req.url.length);
    // do stuff with referrer;
  } else {
    next();
  }
});

1 个答案:

答案 0 :(得分:0)

您可以使用中间件,例如

app.use(function(req, res, next) {
    // do stuff here
    next();
});

您还可以将其范围限定为特定路线,如果需要,可以使用正则表达式(不确定是否可以使用正常表达式,稍微调整一下直到符合您的需要):

app.use(/(.*)\/referrer\/(.*)/, function(req, res, next) {
    // do stuff here
    next();
});

您仍然需要考虑路线中的参数(或者它们不匹配),或者在没有引荐来源部分的情况下将中间件重定向到网址。