首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Express app.param()中间件在每个请求中触发多次

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

Stack Overflow用户
提问于 2015-07-31 06:22:21
回答 1查看 576关注 0票数 0

我已经为我的Express 4应用程序提供了一些中间件,每当请求中出现一组特定的参数时都会触发,如下所示:

代码语言:javascript
复制
app.param(['mystic', 'donkey', 'toadstool'], function(req, res, next, param) {
  console.log(req.params);
});

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

代码语言:javascript
复制
{ mystic: x, donkey: y, toadstool: z }
{ mystic: x, donkey: y, toadstool: z }
{ mystic: x, donkey: y, toadstool: z }

当我想要的只是:

代码语言:javascript
复制
{ mystic: x, donkey: y, toadstool: z }

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

EN

回答 1

Stack Overflow用户

发布于 2015-07-31 10:45:30

如果您在source code of app.param中看到,您将意识到,对于您放入的数组中的每个参数:['mystic', 'donkey', 'toadstool'],绑定到app.param的回调将被顺序调用,在本例中为三次。

所以你不可能在app.param的一次调用中拥有所有的值,也许你可以一次只获取一个参数,就像这样:

代码语言:javascript
复制
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');
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31735077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档