2017-04-07 51 views
1

试图获取表达式js中的URl参数,但获得了空对象。表达式js 4x:req.params返回空对象

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)输出{}

访问网址:http://localhost:3000/reset/CiVv6U9HUPlES3i0eUsNwK9zb7xVZpfHsQNuzMNWqLlGA4NJKoagwbcyiUZ8

+0

什么是“路由器”?你已经初始化了一个新的路由'router.get' – Shaharyar

+0

路由器实现了'var router = express.Router(); ' – Jabaa

+0

你必须显示'password.js'的初始化,你实际上没有为你的路线提供功能 – Shaharyar

回答

0

相反,你可以使用一个中间件来记录路径参数:

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.')); 
0

其实你搞砸了一点点。您必须将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 
} 
+0

你应该阅读'express.Router()'。 – robertklep

3

默认情况下,路由器的嵌套没有得到通过了在mountpaths使用从其父路由器的任何参数。

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

如果你想router能够访问req.params.token,如下创建:

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

记录在案here