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