node.js - 使用中间件在expressjs中的应用程序重定向

标签 node.js express connect

我正在尝试制作一个用于处理 url 别名的中间件,我现在正在做的是:

// [...]
module.exports = function() {

  return function(req, res, next) {
    // getAlias would get an object {alias:"alias/path",source:"/real/path"} or null
    var alias = getAlias(req.url);
    if(alias) {
        req.url = alias.source;
    }
    next();
  };

};

所以基本上我在商店中寻找所请求的 url,如果找到它作为别名,我将 request.url 更改为该别名的源路径,以便 express 调用正确的路由。

问题是 request.url 和 request.path 具有相同的值,但是在 request.url 有效时更改 request.path 不起作用。此外,我不确定我必须再次测试哪一个。

当我与 request.url 交互时一切正常,但只是想确保我以正确的方式进行操作。

有什么想法吗?

最佳答案

重写 req.url 属性是内部重新路由请求的正确方法。这就是为什么有一个 req.originalUrl 用于确实更改原始 URL 的情况。

这就是 req.originalUrl 的 Express 文档所述:

This property is much like req.url, however it retains the original request url, allowing you to rewrite req.url freely for internal routing purposes.

req.url 属性未记录在案,但从上面的陈述中您可以推断出它应该按照您解释的方式使用。它也在某些 Express 测试中以这种方式使用。

关于node.js - 使用中间件在expressjs中的应用程序重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19079497/

相关文章:

javascript - Mongoose - 检索到的文档中没有 '_id' 属性

node.js - 如何接收HTTP请求,修改正文,然后发布到另一个端点?

Magento 连接管理器呈现空白页面

c++ - node.js native 插件 - 包装类的析构函数不运行

javascript - 使用来自 SSH2 的 SFTP 对象

node.js - 每当在 app.get 回调中调用 fs 时,Express.JS 服务器都会给出 'Internal Error' 消息

node.js - Express 401 重定向不会自动发生

javascript - express js中的请求参数

node.js - connect.session 是否可以与 Node-azure 一起使用

node.js - 类型错误 : Object #<ServerResponse> has no method 'redirect'