我从我的来源获得了一堆不同的网址,我想要的是重定向到相同的网址,但将广告系列数据添加到网址(以跟踪推荐的点击次数)。
例如,我有这些网址:
www.example.com/category/product/name.html
www.example.com/id_product=5
我想在最后添加以下内容:utm_source = SOURCE& utm_medium = MEDIUM& utm_campaign = CAMPAIGN
要成为
的网址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
中做到这一点谢谢
答案 0 :(得分:8)
再次使用node的url模块,对@snkashis进行阐述是一个类似但可以说更优雅的解决方案:
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)
- 只有在没有搜索的情况下才会使用
将使用搜索代替查询
query(object; see querystring)。
答案 1 :(得分:2)
以下是使用Node的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);
}
答案 2 :(得分: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);