2012-03-09 65 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); 
}