2016-11-17 56 views
2

查詢我嘗試了一些請求轉發到另一個處理程序:向前快遞JS

route.get("/tag/:id",function(req,res,next){ 
    req.url="/posts?tag_id="+req.params.id 
    next('route') 
}) 

route.get("/posts",function(req,res,next){ 
    console.info(req.query); 
}) 

query在第二處理空。

如何解決這個問題?

+0

你爲什麼要那樣?第一種方法,使用'res.redirect()',其次將邏輯寫入其中並在路由器中使用它。 –

+0

@MukeshSharma Exatcly。在這些情況下,重定向更有意義。 – undefined

+1

想想wordpress中的永久鏈接,你不能將'/ tag/x'重定向到'index.php?tag_name = x' – hguser

回答

3

req.query是空的,因爲您手動設置了網址並且它不會再被解析。

它的第二個處理程序被調用,但只有req.query沒有設置,然後代替:

route.get("/tag/:id", function (req, res, next) { 
    req.url = "/posts?tag_id=" + req.params.id; 
    next('route'); 
}); 

你可以試試:

route.get("/tag/:id", function (req, res, next) { 
    req.url = "/posts?tag_id=" + req.params.id; 
    req.query = {tag_id: req.params.id}; // or whatever you want 
    next('route'); 
}); 

或:

route.get("/tag/:id", function (req, res, next) { 
    req.url = "/posts?tag_id=" + req.params.id; 
    req.query = url.parse(req.url, true).query; 
    next('route'); 
}); 

如果它在你的處理程序中使用,那麼你可能還需要更新req.paramsreq.path a nd other request properties

+0

而是使用'req.query = url.parse(req.url,true)。查詢「,謝謝。 – hguser