2017-04-07 49 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