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

时间:2015-12-14 20:58:51

标签: node.js redirect express get url-redirection

使用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)
});

1 个答案:

答案 0 :(得分:0)

使用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仅适用于{{1}不存在,因为它是从oldUrl解析的。同样适用于host.search