Express js 4x:req.params返回空对象

试图获得expressionjs的URl参数,但得到空的对象。

var password= require('./routes/password'); app.use('/reset/:token',password); 

password.js

 router.get('/', function(req, res, next) { console.log(req.params); res.send(req.params); }); 

console.log(req.params)输出是{}

访问url: http://localhost:3000/reset/CiVv6U9HUPlES3i0eUsNwK9zb7xVZpfHsQNuzMNWqLlGA4NJKoagwbcyiUZ8

       

网上收集的解决方案 "Express js 4x:req.params返回空对象"

默认情况下,嵌套路由器不会从其父路由器传递在装入path中使用的任何参数。

在你的情况下, app是父路由器,它使用/reset/:token作为安装path, router是嵌套路由器。

如果您希望router能够访问req.params.token ,请按如下所示创build它:

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

logging在这里 。

相反,您可以使用中间件来loggingpath参数:

 const logger = (req, res, next)=>{ console.log(req.params) res.send(req.params) next()//<----very important to call it. }; app.use(logger); //<----use to apply in the app router.get('/', (req, res, next)=>res.send('Logged.')); 

其实你搞砸了一点。 你必须将express实例传递给你的模块。

Server.js

 //adding modules require('./routes/password')(app); 

Password.js

 module.exports = function(router) { router.get('/reset/:token', function(req, res, next) { console.log(req.params); res.send(req.params); }); //and so on.. your routes go here }