Express app.param()中间件每次请求多次触发

时间:2015-07-30 22:22:21

标签: node.js express

我已经为我的Express 4应用提供了一些中间件,每次在请求中显示一组特定的参数时都会触发:

app.param(['mystic', 'donkey', 'toadstool'], function(req, res, next, param) {
  console.log(req.params);
});

不幸的是,如果我访问GET /:mystic/:donkey/:toadstool。打印出来:

{ mystic: x, donkey: y, toadstool: z }
{ mystic: x, donkey: y, toadstool: z }
{ mystic: x, donkey: y, toadstool: z }

当我想要的只是:

{ mystic: x, donkey: y, toadstool: z }

有没有办法阻止它每次req / response多次触发,并且仍然在app.param的第一个参数处使用数组?

1 个答案:

答案 0 :(得分:1)

如果你在source code of app.param中看到,你会发现对于你放入的数组中的每个参数:['mystic', 'donkey', 'toadstool'],你绑定到app.param的回调将按顺序调用,这种情况三次。

所以你无法在调用app.param时拥有所有值,可能你可以一次抓住所有的params,例如:

var express = require('express');
var app = express();

app.param('mystic', function(req, res, next, mystic) {
  console.log('mystic: %s', mystic);
  next();
});

app.param('donkey', function(req, res, next, donkey) {
  console.log('donkey: %s', donkey);
  next();
});

app.param('toadstool', function(req, res, next, toadstool) {
  console.log('toadstool: %s', toadstool);
  next();
});

app.get('/:mystic/:donkey/:toadstool', function(req, res) {
  res.send('hey');
});

app.listen(4040, function() {
  console.log('server up and running');
});