Node.js/JavaScript: получить все части иерархии URL-адресов

Я знаю, что вы можете получить строку запроса URL-адреса, например:

var url = require("url");

...

http.createServer((req,res) => console.info(url.parse(req.url).query))

Но это только в том случае, если переменные имеют формат строки запроса:

example.com/index.html?key=val&key2=val2

так далее...

Но что, если бы я хотел получить «переменные» в виде значений, если URL-адрес был в формате:

example.com/key/val/key2/val2

?

Я мог бы просто разделить массив на /, а затем отобразить его соответствующим образом:

var pathParts = request.url.split("/").filter(x => x.length > 0).map(x => x.split("%20").join(" "));

но это не удастся для такого URL-адреса:

example.com/url/http://google.com

Итак, как я могу получить каждое из значений, разделенных /, как уникальный элемент массива, даже если есть вложенные /?

Вы все равно должны urlencode свои строки, так это будет example.com/url/http%3A%2F%2Fgoogle.com

Michał Sadowski 13.03.2019 10:53

@MichałSadowski О, круто, как мне это сделать? (а потом расшифровать?)

B''H Bi'ezras -- Boruch Hashem 13.03.2019 10:55

@MichałSadowski Я понял о encodeURIComponent и decodeUriComponent, но я понял, что это все еще не помогает мне: поскольку мне нужно разделить каждое значение по одному / за раз, как я могу разделить example.com/key/http://yahoo .com/key2/http://google.com (без пробелов)

B''H Bi'ezras -- Boruch Hashem 13.03.2019 11:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
937
1

Ответы 1

Во-первых, когда вы создаете URL-адрес, вам нужно закодировать каждую его часть с помощью encodeURIComponent(). Таким образом, вы получите URL-адрес, например: example.com/url1/http%3A%2F%2Fgoogle.com/url2/http%3A%2F%2Fbing.com. Затем прочитать его так же просто, как использовать:

let requestArray = request.url.split("/")
let requestDecodedArray = requestArray.map((el)=>decodeURIComponent(el))

Когда я запускаю encodeURIComponent в строке, подобной этому вопросу: (уберите пробел после "https"): encodeURIComponent("https://stackoverflow.com/questions/55138803/node-js-javascript-g‌​et-all-parts- of-url-‌​parth-hierchy/551393‌​17#55139317") он кодирует каждый "/" и вообще не различает их, попробуйте в консоли

B''H Bi'ezras -- Boruch Hashem 13.03.2019 11:15

@bluejayke, вот почему вам нужно запустить его перед составлением URL-адреса для каждой его части, а не для всего.

Michał Sadowski 13.03.2019 11:30

Как мне это сделать, пользователь - это тот, кто вводит URL-адрес в свой браузер, и я получаю его из request.url

B''H Bi'ezras -- Boruch Hashem 13.03.2019 11:36

Пользователи обычно не вводят URL напрямую, а получают его, например, по ссылкам; в противном случае вы бы никогда не узнали, какой ввод вы получите. Вам нужно решить это с точки зрения пользовательского интерфейса, но я уверен, что это будет сделано во время создания ссылки href.

Michał Sadowski 13.03.2019 11:46

Я хочу просто использовать URL как переменную

B''H Bi'ezras -- Boruch Hashem 13.03.2019 11:46

Другие вопросы по теме