【问题标题】:can't access req.params of app.use() inside middleware无法访问中间件内 app.use() 的 req.params
【发布时间】:2018-07-09 12:12:13
【问题描述】:

我正在尝试为我的应用程序构建动态路由。 app.js 中的这段代码看起来是这样的:

app.use('/:c_name/api/',middleware);

中间件如下所示:

var router = require('express').Router();
router.get('/:m/:c/:a',(req, res, next) => {
console.log(req.params);
var controller = "./fe-ser/leg/fe/cli/"+req.params.c_name+"/main/process/"+req.params.module+"/controllers/"+req.params.controller;
});

现在要解析中间件内部的路由,我需要c_name 的值,但我无法使用req.params.c_name 访问它。 req.params 仅包含 mca

因此,问题是,如何从我的中间件访问c_name

【问题讨论】:

  • 有解决办法吗?我不想在 app.js 中这样做,因为有数百条路线,而且它不实用。我必须使用这个中间件
  • console.log(req.params.c) 或 console.log(req.params.m) 或 console.log(req.params.a) 或 console.log(req.params.c_name )
  • 始终在参数开始前使用唯一关键字,例如 /product/:id 或 /product/:gender/type/:material
  • 您能否将您声明的内容(用于初始化您的快速路由器)发布为var router=express.Router........
  • @RatanUdayKumar req.params.c_name 在中间件中未定义。这就是整个问题。它只包含 m,a &c

标签: node.js express middleware


【解决方案1】:

您需要在初始化您的router 时添加mergeParams,这将保留req.params

var router = express.Router({mergeParams: true});

希望这会有所帮助!

【讨论】:

  • 很高兴它正在工作!.. 随意将其标记为已回答! ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 2015-12-08
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多