使用Express.js路由器时的范围重定向

时间:2015-04-20 18:07:12

标签: redirect express routing

使用Express Routers时,可以提供路由前缀:

var router = new Express.Router();
app.use("/scope", router);

我们说我的路由器中有一些CRUD路由。

router.post("/", function(req, res) {
  var result = create(req);
  res.redirect(result.id);
});

router.put("/:id", function(req, res) {
  var result = update(req);
  res.redirect(result.id);
});

router.get("/:id", function(req, res) {
  var result = findById(req.params.id);
  res.render("show.html", {data: result});
});

当请求上面的PUT时,响应是重定向到“/ scope / [id]”应该是。请求POST时,响应是重定向到“/ [id]”而不是之前的结果。

我不确定在哪里找到问题的根源,也不知道如何纠正它。

1 个答案:

答案 0 :(得分:0)

无论如何,我会回答这个问题,为了可能遇到这个问题的其他人的利益。

我怀疑您的原始问题是,因为您已禁用严格模式(Express'默认),您的客户端代码可能会发布到/scope' (which in non-strict node is the same as / scope / ). Within your post handler you did a relative redirect using res.redirect(结果) .ID). Let say {result.id {1}} {123 {1}} / 123`。

  

注意:不要忘记Express与实际的重定向关系不大,浏览器会对客户端进行重定向。

通过确保将客户端代码发布到is,然后相对重定向到, then a relative redirect would take you to会将您带到/scope/,就可以轻松解决问题,就像您预期的那样。