在快递js中使用查询转发

时间:2016-11-17 08:22:51

标签: node.js express routes

我尝试将一些请求转发给另一个处理程序:

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在第二个处理程序中为空。

如何解决这个问题?

1 个答案:

答案 0 :(得分: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.pathother request properties