【问题标题】:Scoped redirect when using Express.js Routers使用 Express.js 路由器时的范围重定向
【发布时间】:2015-06-27 14:40:55
【问题描述】:

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

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)你有strict routing启用还是禁用? (2) 你能知道POST 的来源吗?
  • 我使用的是 Express 4.11.2,并且没有更改默认的“禁用”的严格路由。不过,自从发布这个问题以来,我对表单提交方法进行了一些更改,并包含了“方法覆盖”中间件。该问题已在这些更改中得到解决。不幸的是,我正在处理一个脏分支并且没有在版本控制中捕获问题状态,并且不倾向于手动回拨我的更改,直到问题再次出现。
  • 不用担心。我会根据你提供的信息来回答。

标签: redirect express routing


【解决方案1】:

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

我怀疑您最初的问题是,由于您禁用了严格模式(Express 的默认设置),您的客户端代码可能会发布到 /scope' (which in non-strict node is the same as/scope/). Within your post handler you did a relative redirect usingres.redirect(result.id)@ 987654323@result.idis123, then a relative redirect would take you to/123`。

注意:不要忘记 Express 与实际重定向无关,这些重定向由浏览器在客户端处理。

通过确保将您的客户端代码发布到/scope/,然后按照您的预期,相对重定向到id 将带您到/scope/id,可以轻松解决该问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    相关资源
    最近更新 更多