Общие методы анализа URL-адресов в узле

Node.js внешний интерфейс регулярное выражение Unicode

Строка 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'));
  // 输出空字符串