Строка URL представляет собой структурированную строку, состоящую из нескольких значимых частей. Некоторые из них мы неизбежно будем использовать в своей работе.Самый примитивный метод перехвата строк и регулярного сопоставления неизбежно будет неудобен и красив в использовании, поэтому мы предоставляем метод обработки и парсинга в наших nodejs.Модуль url url, этот модуль предоставляет некоторые практические функции, чтобы сделать его более удобным и быстрым для анализа, затем давайте проанализируем использование часто используемых функций, которые он предоставляет
Модуль url предоставляет два набора API для обработки URL-адресов: Один из них — уникальный API, оставленный Node.js,
Причина сохранения: хотя устаревшие API-интерфейсы Node.js не устарели, они сохраняются для обратной совместимости с существующими приложениями. Поэтому новые приложения, пожалуйста, используйте API WHATWG.
Другой — это API, который реализует стандарт URL WHATWG, обычно используемый в веб-браузерах.Этот API официально применяется в node8.0.0.
В браузерах URL-адреса WHATWG всегда доступны глобально, в то время как в Node.js любой случай открытия или использования ссылки должен заранее ссылаться на модуль «url»: require('url').URL
const url = require('url');
Во-первых, давайте посмотрим, какие методы есть в этом модуле?
let http = require('http');
let url = require('url');
console.log(url);
// { Url: [Function: Url],
// parse: [Function: urlParse],
// resolve: [Function: urlResolve],
// resolveObject: [Function: urlResolveObject],
// format: [Function: urlFormat],
// URL: [Function: URL],
// URLSearchParams: [Function: URLSearchParams],
// domainToASCII: [Function: domainToASCII],
// domainToUnicode: [Function: domainToUnicode] }
Далее мы объясним использование вышеуказанных методов один за другим.
let {parse, resolve, format, URL, URLSearchParams, domainToASCII, domainToUnicode} = require('url');
1. разбор (urlStr, queryString, AnalysisHost)
Устаревший API Node.jsпараметр:
urlStr: URL-адрес для анализа queryString: проанализированная строка запроса или объект запроса, true — это объект, а false — строка, например: http://foo/bar?a=123, если true, запрос: {a: 123}, если false, запрос: 'a = 123' по умолчанию ложно AnalysisHost: анализировать ли хост (строку после // до следующего/до), например: //foo/bar будет анализироваться как {host: 'foo', pathname: '/bar}, в противном случае {pathname : '//foo/bar'}. По умолчанию false
Функция: анализировать URL-адрес и возвращать объект атрибута URL-адреса.
Например:
const myURLA =
url.parse('https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash', true);
console.log(myURLA);
// Url {
// protocol: 'https:', // 协议
// slashes: true,
// auth: 'user:pass', // 用户名密码
// host: 'sub.host.com:8080', // host主机名
// port: '8080', // 端口号
// hostname: 'sub.host.com', // 主机名不带端口号
// hash: '#hash', // 哈希值
// search: '?query=string',// 查询字符串
// query: 'query=string', // 请求参数
// pathname: '/p/a/t/h', // 路径名
// path: '/p/a/t/h?query=string', // 带查询的路径名
// href: 'https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash' // 原字符串本身
}
ошибка:
Ошибка TypeError будет выдана, если urlStr не является строкой.
const myurl = url.parse({a:123});
TypeError: Parameter "url" must be a string, not object
Выдает ошибку URIError, если атрибут auth существует, но не может быть закодирован.
2. решить (от, до)
параметр:
from: базовый URL, соответствующий синтаксическому анализу to: URL-адрес гиперссылки для анализа
Назначение: разрешает целевой URL-адрес относительно базового URL-адреса таким же образом, как веб-браузеры анализируют гиперссылки.
Например:
const url = require('url');
url.resolve('/one/two/three', 'four'); // '/one/two/four'
url.resolve('http://example.com/', '/one'); // 'http://example.com/one'
url.resolve('http://example.com/one', '/two'); // 'http://example.com/two'
3. формат(url, параметры)
параметр:
url: объект URL WHATWG опции: 1. auth: true, если сериализованная строка URL должна содержать имя пользователя и пароль, в противном случае — false. По умолчанию истинно. 2. fragment: true, если сериализованная строка URL должна содержать фрагменты, иначе false. По умолчанию истинно. То есть должно ли оно содержать хеш-значение? 3. search: true, если сериализованная строка URL должна содержать поисковый запрос, иначе false. По умолчанию истинно. 4. unicode: true True, если символы Unicode, появляющиеся в основном элементе строки URL-адреса, должны быть закодированы напрямую, а не с использованием кодировки Punycode, по умолчанию — false. Возвращает настраиваемое сериализуемое строковое представление URL-адреса объекта URL-адреса WHATWG.
Хотя метод toString() объекта URL и атрибут href могут возвращать сериализованную строку URL. Однако ни один из них не может быть настроен. А метод url.format(URL[ options]) позволяет базовую настройку вывода.
Например:
const { URL } = require('url');
const myURL = new URL('https://a:b@你好你好?abc#foo');
console.log(myURL.href);
// 输出 https://a:b@xn--6qqa088eba/?abc#foo
console.log(myURL.toString());
// 输出 https://a:b@xn--6qqa088eba/?abc#foo
console.log(url.format(myURL, { fragment: false, unicode: true, auth: false }));
// 输出 'https://你好你好/?abc'
4. новый URL (ввод [ база])
Класс URL-адресов, совместимый с браузером, реализованный в соответствии со стандартом URL-адресов WHATWG.
Примечание. В соответствии с соглашениями браузеров все свойства объекта URL реализуются как геттеры и сеттеры в прототипе класса, а не как свойства данных в самом объекте. Поэтому, в отличие от [устаревших urlObjects][], использование ключевого слова удаления для любого свойства объекта URL (например, удалить myURL.protocol, удалить myURL.pathname и т. д.) не имеет никакого эффекта, но по-прежнему возвращает значение true.
параметр:
input: проанализированный входной URL база: если «вход» является относительным URL-адресом, базовый URL-адрес для анализа
Роль: создать новый объект URL, проанализировав входные данные для базы. Если база является строкой, метод синтаксического анализа такой же, как и новый URL (база).
Например:
const { URL } = require('url');
const myURL = new URL('/foo', 'https://example.org/');
// https://example.org/foo
TypeError будет выброшен, если ввод или база являются недопустимыми URL-адресами. Обратите внимание, что данное значение будет преобразовано в строку. Например:
const { URL } = require('url');
const myURL = new URL({ toString: () => 'https://example.org/' });
// https://example.org/
Символы Unicode, присутствующие во входном имени хоста, будут автоматически преобразованы в ASCII с использованием алгоритма Punycode.
const { URL } = require('url');
const myURL = new URL('https://你好你好');
// https://xn--6qqa088eba/
5.URLSearchParams
Интерфейс API URLSearchParams предоставляет разрешения на чтение и запись в часть URLQUERY. Класс URLSearchParams также может использоваться в одиночку с любым из следующих четырех конструкторов.
Например:
const { URL, URLSearchParams } = require('url');
const myURL = new URL('https://example.org/?abc=123');
console.log(myURL.searchParams.get('abc'));
// 输出 123
myURL.searchParams.append('abc', 'xyz');
console.log(myURL.href);
// 输出 https://example.org/?abc=123&abc=xyz
myURL.searchParams.delete('abc');
myURL.searchParams.set('a', 'b');
console.log(myURL.href);
// 输出 https://example.org/?a=b
const newSearchParams = new URLSearchParams(myURL.searchParams);
// 上面的代码等同于
// const newSearchParams = new URLSearchParams(myURL.search);
newSearchParams.append('a', 'c');
console.log(myURL.href);
// 输出 https://example.org/?a=b
console.log(newSearchParams.toString());
// 输出 a=b&a=c
// newSearchParams.toString() 被隐式调用
myURL.search = newSearchParams;
console.log(myURL.href);
// 输出 https://example.org/?a=b&a=c
newSearchParams.delete('a');
console.log(myURL.href);
// 输出 https://example.org/?a=b&a=c
6. domainToASCII(домен)
Возвращает сериализованный домен Punycode ASCII. Если домен является недопустимым доменным именем, будет возвращена пустая строка. Он делает обратное url.domainToUnicode().
const url = require('url');
console.log(url.domainToASCII('español.com'));
// 输出 xn--espaol-zwa.com
console.log(url.domainToASCII('中文.com'));
// 输出 xn--fiq228c.com
console.log(url.domainToASCII('xn--iñvalid.com'));
// 输出空字符串
7. domainToUnicode(domain)
Возвращает сериализованный домен Unicode. Если домен является недопустимым доменным именем, будет возвращена пустая строка.
Он делает обратное url.domainToASCII().
const url = require('url');
console.log(url.domainToUnicode('xn--espaol-zwa.com'));
// 输出 español.com
console.log(url.domainToUnicode('xn--fiq228c.com'));
// 输出 中文.com
console.log(url.domainToUnicode('xn--iñvalid.com'));
// 输出空字符串