Redirect 使用Express.js路由器时的作用域重定向

Redirect 使用Express.js路由器时的作用域重定向,redirect,express,routing,Redirect,Express,Routing,使用快速路由器时,可以提供路由前缀: 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

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

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]”,而不是先前的结果


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

无论如何,我都会回答这个问题,以方便其他可能遇到这个问题的人

我怀疑您最初的问题是,由于您禁用了严格模式(Express“default”),您的客户端代码可能正在发布到
/scope”(在非严格节点中与
/scope/
相同)。在post处理程序中,您使用
res.redirect(result.id)
执行了相对重定向。假设
result.id
123
,则相对重定向会将您带到
/123`

注意:别忘了Express与实际重定向没有什么关系,这些重定向由浏览器在客户端处理


通过确保您的客户端代码发布到
/scope/
,然后相对重定向到
id
,正如您所期望的那样,可以轻松解决此问题

您使用的是哪个版本的express?还有两个问题:(1)您是否启用或禁用了
严格路由
?(2)你能告诉我
POST
的源代码吗?我使用的是Express 4.11.2,没有改变默认的“禁用”严格路由。不过,自从发布这个问题以来,我对表单提交方法做了一些更改,并包括了“方法覆盖”中间件。这一问题已在这些变化中得到解决。不幸的是,我正在处理一个脏的分支,并且没有在版本控制中捕获问题状态,在问题再次出现之前,我不想手动回拨我的更改。不用担心。我会回答你提供的信息。