node.js - 如何使用express/Node.js 重定向 URL,同时维护所有 GET 参数

标签 node.js express get redirect

使用 Express/Node.js,我收到带有未知数量参数的 GET 请求。参数的名称并不总是事先知道的。我需要将这些请求重定向到新的 URL,同时维护所有现有的 GET 参数。

即。我可能会得到其中任何一个

http://example.com/example
http://example.com/example?id=xxx
http://example.com/example?a=xxx&_b=xxx...
etc

这又需要重定向到:

http://newexample.com/example
http://otherdomain.org/sample?type=new&id=xxx
http://newexample.com/sample?a=xxx&_b=xxx...
etc

我编写了这段代码来实现这一点,但感觉这将是框架中已经存在的常见功能。有更好的办法吗?

app.get('/example', function(req, res){
    var oldParams = ""
    var redirectUrl = config.exampleUrlNew;
    if (req.originalUrl != null && req.originalUrl.indexOf('?') > 0) {
      oldParams = req.originalUrl.split("?")[1];
    }
    if (oldParams != "" && redirectUrl.indexOf('?') > 0) {
      oldParams = "&" + oldParams;
    } else {
      oldParams = "?" + oldParams;
    }
    res.redirect(redirectUrl + oldParams)
});

最佳答案

使用url模块

var URL = require('url');

var newUrl = URL.parse(oldUrl, true); // true to parse the queryString as well

newUrl.host = null; // because
newUrl.hostname = 'newexample.com';

newUrl.search = null; // because
newUrl.query.newParam = 'value';

newUrl = URL.format(newUrl);

有一个怪癖,您必须将 .host 属性设置为 null 才能使 .hostname 属性优先,因为根据文档设置 hostname 仅在 host 不存在时才有效,因为它是从 oldUrl 解析的。 .search.query

也是如此

关于node.js - 如何使用express/Node.js 重定向 URL,同时维护所有 GET 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34276484/

相关文章:

javascript - 为什么带参数的动词方法会阻塞同一路由的另一个方法?

node.js - 如何通过 Express Route 使用 Mongoose-Crate 存储文件

node.js - APN Node : Error when loading PEM file

javascript - 如何保护从 Angular 2 到 Express Server 的 http 帖子

node.js - ECONNREFUSED 127.0.0.1 :3000 at TCPConnectWrap. afterConnect [as oncomplete] errno : 'ECONNREFUSED' ,

javascript - 使用 firestore Cloud Function 请求不同的端点

json - 为图书管理系统设计一个Restful API(JSON Data、Spring MVC、Restful API)

javascript - 我如何发送带有自定义 header 的获取请求

node.js - 我想通过 npm 安装一些东西,但它说 'error' 和 'checkPermissions Missing'

php - 使用 Laravel 5 格式化 URL 查询字符串(如 Stack Overflow)