2012-03-09 63 views
3

我從我的來源獲得了一堆不同的網址,我想要的是重定向到相同的網址,但將廣告系列數據添加到網址(以跟蹤引用的點擊次數)。如何將廣告系列跟蹤數據自動添加到任何網址?

例如,我有以下網址:

www.example.com/category/product/name.html

www.example.com/id_product=5

我想在最後添加以下內容:utm_source = SOURCE & utm_medium = MEDIUM & utm_campaign = CAMPAIGN

And th È網址成爲

www.example.com/category/product/name.html?utm_source=SOURCE & utm_medium = MEDIUM & utm_campaign = CAMPAIGN

www.example.com/id_product=5 & utm_source = SOURCE & utm_medium = MEDIUM & utm_campaign = CAMPAIGN

如何我正確地檢查並覆蓋所有的情況下,如果一個URL字符串有參數,並添加我的嗎? 我想這樣做在node.js中

謝謝

回答

8

在闡述@snkashis,類似但可以說是更優雅的解決方案,再次使用節點的url模塊是:

var addQueryParams = function (cleanUrl) { 
    var obj = url.parse(cleanUrl, true, false); 
    obj.query['utm_source'] = 'SOURCE'; 
    obj.query['utm_medium'] = 'MEDIUM'; 
    obj.query['utm_campaign'] = 'CAMPAIGN'; 
    delete obj.search; // this makes format compose the search string out of the query object 
    var trackedUrl = url.format(obj); 
    return trackedUrl; 
}; 

這工作,因爲url.format首先查找search,如果它無法找到它,它構成從query對象的查詢字符串

(從節點的url模塊文檔採取http://nodejs.org/api/url.html#url_url_format_urlobj

  • 搜索將代替查詢

  • 查詢(對象的使用;請參閱查詢字符串)將僅在搜索不存在時使用。

+0

它工作!謝謝。 – 2012-03-16 11:12:05

0

Connect將幫助您:

var connect = require('connect'); 

var app = connect(); 
app.use(connect.query()); 
app.use(function (req, res, next) { 
    console.log(req.query); 
    res.end(JSON.stringify(req.query)); 
}); 

app.listen(3000); 
2

這裏是在使用節點的URL模塊不同的場景一個例子。

var url = require('url'); 

var exurls = ["www.example.com/category/product/name.html","www.example.com/id_product=5?hasparam=yes"] 

var to_append = "utm_source=SOURCE&utm_medium=MEDIUM&utm_campaign=CAMPAIGN"; 

for (i=0;i<exurls.length;i++) { 
    var parsedobj = url.parse(exurls[i],true,false); 
    //Below checks if param obj is empty. 
    if (Object.keys(parsedobj.query).length!==0) { 
     var newpath = parsedobj.href+"&"+to_append; 
    } 
    else { 
     var newpath = parsedobj.href+"?"+to_append; 
    } 
    console.log(newpath); 
} 
相關問題