Тестирую локально на 127.0.0.1:3000.
Имеется скрипт, получающий значение поля
input по событию
onkeyup и с помощью
XMLHttpRequest значение отправляется со стороны клиента на сторону сервера NodeJS:
<script>
function search() {
let method = 'POST';
let url = new URL("/");
let searchValue = document.getElementById('search').value;
console.log('[' + url.href + '] searchValue:' + searchValue);
let searchRequest = new XMLHttpRequest();
searchRequest.open(method, url);
searchRequest.send({searchQuery: searchValue});
}
</script>
Согласно скрипту, POST запрос отправляется на корневой адрес
let url = new URL("/");
, который обрабатывается на сервере таким образом:
const express = require('express');
const bodyParser = require('body-parser');
const urlencodedParser = bodyParser.urlencoded({ extended: false});
const jsonParser = bodyParser.json();
app.use(jsonParser);
app.use(urlencodedParser);
// some code ....
exports.index = function (request, response) {
let giftCertificates;
let searchValueFromPage = JSON.stringify(request.body.searchQuery);
// if the user entered search request, then the event "onkeyup" will run
if(searchValueFromPage) {
giftCertificates = search(searchValueFromPage, content);
} else {
giftCertificates = content;
}
response.render('index.hbs', {
title: 'Gifts main page',
text: 'This is the left box',
gifts: giftCertificates
});
}
Но в консоли получается ошибка:
Uncaught TypeError: URL constructor: / is not a valid URL.
Если вместо
let url = new URL("/");
я пропишу
let url = new URL(window.location.href);
, что будет равно
http://127.0.0.1:3000/
, то после ввода мной значение в
input
, запрос не попадает на сервер по пути
http://127.0.0.1:3000/
, почему?