Тело запроса x-www-form-urlencoded
должно быть name=BARNEY%20MCGREW%21&rating=90
.
Вы отправляете запрос по fetch
с телом '{"name":"BARNEY MCGREW!","rating":90}'
.
Поскольку нет =
, вся строка JSON считается именем параметра с пустым значением.
Итак, вам дан объект из req.body
, где в качестве ключа выступает строковый JSON.
Создайте URLSearchParams
, передав ваши данные конструктору - замените JSON.stringify
.
fetch('http://localhost:1234/acts/create', {
method: 'POST',
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: new URLSearchParams({
name: 'BARNEY MCGREW!',
rating: 90,
})
})
Ваше тело запроса fetch
теперь должно быть name=BARNEY%20MCGREW%21&rating=90
.
Это будет правильно проанализировано анализатором тела как содержимое x-www-form-urlencoded
.
Если URLSearchParams
не определено, есть пакеты npm, которые его предоставят. В противном случае все, что он делает, это создает строку URL-параметров путем кодирования и объединения ключей и значений с помощью =
и объединения каждой пары с помощью &
, что можно сделать следующим образом:
function URLSearchParams(data) {
return Object.keys(data).map(key => {
return `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`;
}).join('&');
}
Я сделал, "осматривают элемент" на ссылке на той странице с поджигателем, и на вкладке DOM это говорит, что существует (анонимная) функция onclick, и также некоторая другая функция, вызванная "s_onclick_0".
Я подключил коаксиальным кабелем поджигателя, помещающего часы как
alert(document.links[0].onclick)
чтобы предупредить меня функция onclick что omniture (я предполагаю), присоединения к ссылкам:
function anonymous(e) {
var s = s_c_il[0], b = s.eh(this, "onclick");
s.lnk = s.co(this);
s.t();
s.lnk = 0;
if (b) {
return this[b](e);
}
return true;
}
Возможно, таким же образом Вы видите то, что это действительно бежит за всей той путаницей.
Ряд рекомендаций реализаторам аналитики на странице:
Используйте событие уровня документа, получая только, это находится почти в каждом случае (кроме того, изменяются/отправляют события), достаточный
Не выполняйте интенсивный вычислением код (а также никакие операции IO) в обработчиках, скорее откладывайте выполнение с тайм-аутом
Если это, два простых правила приняты во внимание, я держал пари, что Ваш браузер выживет
DOM не обеспечивает средств для занимания самоанализом через наборы слушателей событий, связанные с узлом.
Единственная ситуация, где слушатель может быть идентифицирован, состоит в том, когда она была добавлена посредством установки свойства, или атрибут на элементе - проверяют onxxx свойство или атрибут.
Был разговор недавно о группе WebAPI в W3 на том, добавить ли эту функциональность. Специалисты, кажется, против этого. Я совместно использую их аргументы.
У меня есть некоторый опыт с Omniture и рассмотрением Вашего s_code.js, у Вас есть несколько вещей, продолжающихся в области "Link Tracking", например:
/* Link Tracking Config */
s.trackDownloadLinks=true
s.trackExternalLinks=true
s.trackInlineStats=true
s.linkDownloadFileTypes="exe,zip,wav,mp3,mov,mpg,avi,wmv,pdf,doc,docx,xls,xlsx,ppt,pptx"
s.linkInternalFilters="javascript:,gatehousemedia.com"
s.linkLeaveQueryString=false
s.linkTrackVars="None"
s.linkTrackEvents="None"
Я консультировался бы с людьми в Omniture и проверил бы, что Ваша конфигурация отслеживания ссылок настраивается правильно.
А именно, этот шаблон и ссылки внутри, кажется, принадлежат morningsun.net, и все же morningsun.net не находится в установке s.linkInternalFilters. При использовании того же s_code.js файла для нескольких доменов можно использовать JavaScript для устанавливания значений конфигурации для вещей как это (базирующийся на document.location.hostname, например).
У меня лично нет опыта с конфигурацией отслеживания ссылок, или я предоставил бы Вам больше подробной информации о том, как настроить его :)
При перемещении домой я пришел к решению, которое допускает самоанализ обработчиков событий на элементе, добавленном с AddEventListener. Выполненный код перед включением Вашего кода аналитики. Код не был проверен, если работы, но идея, я предполагаю, ясно. Это не будет работать в IE, однако можно применить подобную технику (перезаписи участника API) там также.
(function(){
var fAddEventListener = HTMLElement.prototype.addEventListener;
HTMLElement.prototype.addEventListener = function() {
if (!this._listeners)
this._listeners = [];
this._listeners.push(arguments);
fAddEventListener.apply(this, arguments);
}
})();