Как автоматически добавить данные отслеживания кампании в любой URL? - PullRequest
3 голосов
/ 09 марта 2012

Я получаю несколько разных URL-адресов из своих источников, и мне хотелось бы перенаправить на тот же URL-адрес, но с данными кампании, добавленными в URL (для отслеживания упомянутых кликов).

Например, у меня есть следующие URL:

www.example.com / категория / продукт / name.html

www.example.com / id_product = 5

В конце хочу добавить следующее: utm_source = SOURCE & utm_medium = MEDIUM & utm_campaign = CAMPAIGN

И URL, чтобы стать

www.example.com / категория / продукт / name.html? Utm_source = ИСТОЧНИК & utm_medium = MEDIUM & utm_campaign = КАМПАНИЯ

www.example.com / id_product = 5 & utm_source = ИСТОЧНИК & utm_medium = СРЕДНЕЕ & utm_campaign = КАМПАНИЯ

Как правильно проверить и охватить все случаи, если в строке URL есть параметры, и добавить мою? Я хочу сделать это в node.js

Спасибо

Ответы [ 3 ]

8 голосов
/ 16 марта 2012

Разработка @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)

  • поиск будет использоваться вместо запроса

  • запрос (объект; см. Строку запроса) будет использоваться только при отсутствии поиска.

2 голосов
/ 09 марта 2012

Вот пример, показывающий различные сценарии с использованием модуля 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);
}
0 голосов
/ 09 марта 2012

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...