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

标签 redirect express routes

使用 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]”而不是之前的结果。

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

最佳答案

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

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

NOTE: Don't forget that Express has little to do with the actual redirects, which are taken care of client-side by the browser.

通过确保您的客户端代码发布到/scope/,这个问题可以很容易地解决。 ,之后相对重定向到 id会带您到/scope/id ,正如您所期望的那样。

关于redirect - 使用 Express.js 路由器时的范围重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29755225/

相关文章:

.net - 使用不返回 Json(而是另一个 View )的 JQuery AJAX 调用 MVC 操作

java - 使用 <wsdl :import> over SSL redirection 使用 Web 服务

node.js - ExpressJS 在请求函数中提供静态文件

node.js - 如何在express 4.0中使用request.query时转义特殊字符

java - 有没有办法使用 playframework 接受路由中的自定义对象?

laravel - Laravel 8 的动态路线

routes - play 框架 - 未找到现有路线的错误

shell - 为什么 ksh 在执行子 shell 时禁用 stderr?

regex - 具体来说,RewriteCond %{QUERY_STRING}

node.js - 如何在node.js中监听192.168.1.1/subdir/?