javascript - URL 重写在 Express 4.14.1 中不起作用

标签 javascript express

我在很多 SO 帖子中发现,为了在 Express 4 中重写 URL,我会执行如下操作:

router.use('/one/:someId', (req, res, next) => {
    req.url = `/two/${req.params.someId}`;
    next();
});

router.get('/one/:someId', (req, res) => {
    res.send("reached /one/:someId");
});

router.get('/two/:someId', (req, res) => {
    res.send("reached /two/:someId");
});

但是当我尝试这样做时,URL 不仅没有更改为我预期的“/two/某个整数”,而且仍然是“/one/某个整数” “但它到达了我在应用程序文件中设置的 404 - 未找到页面。

此路由位于路由器文件中,我也尝试将 URL 设置为:

req.url = `/routerPath/two/${req.params.someId}`;

但是结果是完全一样的。

那么我可能会错过什么?

谢谢。

最佳答案

您必须区分两种重定向:

  • 内部重定向在服务器上进行,客户端不会注意到。它们为您的服务器编程提供了便利,但并不是必需的 - 您始终可以引入一个由所有端点调用的辅助方法。
  • HTTP 重定向建议客户端(例如网络浏览器)转到不同的 URL。由于您希望 URL 发生变化,因此这就是您想要的。

只需调用 res.redirect ,确保对特殊字符进行编码:

router.get('/one/:someId', (req, res) => {
    res.redirect(`/two/${encodeURIComponent(req.params.someId)}`);
});

router.get('/two/:someId', (req, res) => {
    res.render("reached /two/:someId");
});

关于javascript - URL 重写在 Express 4.14.1 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43129067/

相关文章:

javascript - 为什么我们需要javascript mvc?

node.js - Node.js+express+session

node.js - Angular 6 |表达 : Getting 404 error on dist files

javascript - 测试expressJS的基本中间件

javascript - jqPlot 中每个值的固定最小宽度

javascript - 访问在 html 标签之间滑动的单选按钮的值

javascript - 在弹出窗口中隐藏网址

javascript - 使用 array.map() 从对象数组中查找元素

node.js - Express.js API 端点 CRUD 最佳实践

没有模板引擎的 Node.js