2015-12-14 50 views
0

使用Express/Node.js我收到的GET請求數量未知。參數的名稱並不總是預先知道的。我需要將這些請求重定向到一個新的URL,同時保持所有現有的GET參數。如何使用express/Node.js保持所有GET參數時重定向URL

即。我可能得到的任何這些

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

'req.url.replace('example.com','newexample.com')' – laggingreflex

+0

不夠公平......但是爲了清晰起見,我簡化了實際示例。替換網址與原始網址和未知網址完全不同(在配置中指定)。它甚至可能已經對原始URL中沒有的新URL參數進行硬編碼。 – Jimmy

回答

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財產優先怪癖,因爲ACC的文檔設置hostname只能如果host不存在,它是從oldUrl解析出來的。同上.search.query

相關問題