2016-11-17 1 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

Подумайте о ссылке permalink в wordpress, вы не можете перенаправить '/ tag/x' в' index.php? Tag_name = x' – hguser

ответ

3

req.query пуст, потому что вы устанавливаете URL-адрес вручную, и он снова не разбирается.

Это второй обработчик вызывается, но только 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.params, req.path a nd other request properties.

+0

Вместо этого я использую 'req.query = url.parse (req.url, true). запрос', спасибо. – hguser