我从我的来源得到了一堆不同的URL,我想重定向到同一个URL,但在URL中添加了活动数据(以跟踪引用的点击)。
例如,我有以下URL:
www.example.com/category/product/name.html
www.example.com/id_product=5
我想在末尾添加以下内容:utm_source=source&utm_medium=中等&utm_campaign=活动
URL将成为
www.example.com/category/product/name.html?utm_source=source&utm_medium=中等&utm_campaign=活动
www.example.com/id_product=5&utm_source=source&utm_medium=中等&utm_campaign=活动
如果URL字符串有参数,我如何正确地检查和覆盖所有情况,并添加我的参数?我想在node.js 中完成
感谢
在@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)
将使用搜索代替查询
查询(对象;请参阅querystring)将仅在缺少搜索时使用。
这里有一个示例,显示了使用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);
}
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);