node中のurl常用方法の解析
7216 ワード
url文字列は構造化された文字列で、いくつかの意味のある部分から構成されています.私たちは仕事の中で避けられない部分を使っています.文字列の切り取りと正則のマッチングによって、最も原始的な方法は使いにくいです.そして、私たちのnodejsでは、処理と解析urlのモジュールurlを提供しています.このモジュールは実用的な機能を提供しています.じゃ、次に私達が分析してみます.それが提供する常用関数の使い方を教えてください.
urlモジュールは2つのAPIを提供してURLsを処理します.一つはNode.jsが残した特有のAPIです.
予約されている理由:Node.jsが残した特有のAPIは破棄されていませんが、予約されている目的は、既存のアプリケーションを後方互換するためです.したがって、新しいアプリケーションはWHATWG APIを使用してください.
もう一つは、一般的にウェブブラウザにおいて、WHATWG URL StandardのAPIを実現するために使用される.このAPIは、node 8.0.0において正式に適用される.
ブラウザでは、WHATWG URLはグローバルで常に利用可能であり、ノード.jsにおいては、リンクを開くか使用するかはいずれも事前に'url'モジュール:require('url').URLを参照してください.
Node.jsが残した特有のAPIパラメータ:
url Str:解析するurlアドレスqueryString:解析したクエリー文字列ですか?それとも照会対象ですか?trueはオブジェクトfalseは文字列です.例えば:http://foo/bar?a=123trueならquery:{a:123}falseならquery:'a=123'はfalse AnalysisHostです.ホストを解析しますか?例えば、//foo/barは{host:foo}と解析されます.pathname:'/bar}でなければ、{pathname:'/foo/bar'}.デフォルトはfalseです.
作用:urlを解析して、url属性のオブジェクトを返します.
たとえば:
urlStrが文字列でない場合はType Errを投げます.
2、レスリング(from、to)
パラメータ:
from:解析時に対応する基本的なurl to:解析するハイパーリンクurl
機能:一つの目標URLを一つの基礎URLに対して解析するWebブラウザでハイパーリンクを解析する.
たとえば:
パラメータ:
url:一つのWHATWG URLオブジェクトoptions:1.auth:もしプログレッシブURL文字列がユーザ名とパスワードをtrueとするべきであれば、falseとなります.デフォルトはtrueです2.fragment:もしプログレッシブのURL文字列がtrueに区分されている場合、そうでないとfalseです.デフォルトはtrueです.つまり、ハッシュ値3.searchを含む必要があるのではないかということです.もしプログレッシブURL文字列が検索クエリをtrueとすることを含むべきで、そうでなければfalseです.デフォルトはtrueです4.unicode:true URL文字列のホスト要素にあるUnicode文字は、Punycodeコードをtrueとして使うのではなく、直接コード化されるべきで、デフォルトはfalseとしています.WHATWG URLオブジェクトのカスタマイズ可能なシリアルURL文字列表現を返します.
URLオブジェクトのtoString()メソッドとhref属性は、URLの順列化された文字列を返すことができるが、これは、同じである.しかし、どちらもカスタマイズできません.また、url.format(URL[,options])メソッドは、出力の基本的なカスタムを許可します.
たとえば:
ブラウザ対応URL類は、WHATWG URL規格により実現します.
注意:ブラウザの約束により、URLオブジェクトのすべての属性は、オブジェクト自体のデータ属性ではなく、クラスの原型の上でgetterとsetterとして実現されます.したがって、「レガシーurlObjects」[]とは異なり、URLオブジェクトの任意の属性(例えばdelete myURL.protocol、delete myURL.pathnameなど)にdeleteキーワードを使用すると効果はないが、trueに戻る.
パラメータ:
input:解析の入力url base:inputが相対urlであれば、解析するための基本urlです.
作用:inputをベースに解析して新しいURLオブジェクトを作成します.ベースが文字列であれば、解析方法はnew URL(base)と同じです.
たとえば:
URLSearch Parames APIはURLquery部分の読み書き権限を提供します.URLSearch Parames類も以下の4つの構成関数のいずれかと単独で使用できる.
たとえば:
PnyCode ASCIIのプログレッシブなdomainを返します.domainが無効なドメイン名であれば、空の文字列に戻ります.それはurl.domann ToUnicaodeの逆演算を実行します.
Unicodeのプログレッシブなdomainを返します.domainが無効なドメイン名であれば、空の文字列を返します.
それはurl.domann ToASCIIの逆演算を実行します.
urlモジュールは2つのAPIを提供してURLsを処理します.一つはNode.jsが残した特有のAPIです.
予約されている理由:Node.jsが残した特有のAPIは破棄されていませんが、予約されている目的は、既存のアプリケーションを後方互換するためです.したがって、新しいアプリケーションはWHATWG APIを使用してください.
もう一つは、一般的にウェブブラウザにおいて、WHATWG URL StandardのAPIを実現するために使用される.このAPIは、node 8.0.0において正式に適用される.
ブラウザでは、WHATWG URLはグローバルで常に利用可能であり、ノード.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)Node.jsが残した特有のAPIパラメータ:
url Str:解析するurlアドレスqueryString:解析したクエリー文字列ですか?それとも照会対象ですか?trueはオブジェクトfalseは文字列です.例えば:http://foo/bar?a=123trueならquery:{a:123}falseならquery:'a=123'はfalse AnalysisHostです.ホストを解析しますか?例えば、//foo/barは{host:foo}と解析されます.pathname:'/bar}でなければ、{pathname:'/foo/bar'}.デフォルトはfalseです.
作用:urlを解析して、url属性のオブジェクトを返します.
たとえば:
const myURLA =
url.parse('https://user:[email protected]: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:[email protected]:8080/p/a/t/h?query=string#hash' //
}
エラー:urlStrが文字列でない場合はType Errを投げます.
const myurl = url.parse({a:123});
TypeError: Parameter "url" must be a string, not object
auth属性が存在しますが、エンコードできない場合はURIErrorをスローします.2、レスリング(from、to)
パラメータ:
from:解析時に対応する基本的なurl to:解析するハイパーリンクurl
機能:一つの目標URLを一つの基礎URLに対して解析するWebブラウザでハイパーリンクを解析する.
たとえば:
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、format(url、options)パラメータ:
url:一つのWHATWG URLオブジェクトoptions:1.auth:もしプログレッシブURL文字列がユーザ名とパスワードをtrueとするべきであれば、falseとなります.デフォルトはtrueです2.fragment:もしプログレッシブのURL文字列がtrueに区分されている場合、そうでないとfalseです.デフォルトはtrueです.つまり、ハッシュ値3.searchを含む必要があるのではないかということです.もしプログレッシブURL文字列が検索クエリをtrueとすることを含むべきで、そうでなければfalseです.デフォルトはtrueです4.unicode:true URL文字列のホスト要素にあるUnicode文字は、Punycodeコードをtrueとして使うのではなく、直接コード化されるべきで、デフォルトはfalseとしています.WHATWG URLオブジェクトのカスタマイズ可能なシリアルURL文字列表現を返します.
URLオブジェクトのtoString()メソッドと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、new URL(input[、base])ブラウザ対応URL類は、WHATWG URL規格により実現します.
注意:ブラウザの約束により、URLオブジェクトのすべての属性は、オブジェクト自体のデータ属性ではなく、クラスの原型の上でgetterとsetterとして実現されます.したがって、「レガシーurlObjects」[]とは異なり、URLオブジェクトの任意の属性(例えばdelete myURL.protocol、delete myURL.pathnameなど)にdeleteキーワードを使用すると効果はないが、trueに戻る.
パラメータ:
input:解析の入力url base:inputが相対urlであれば、解析するための基本urlです.
作用:inputをベースに解析して新しいURLオブジェクトを作成します.ベースが文字列であれば、解析方法はnew URL(base)と同じです.
たとえば:
const { URL } = require('url');
const myURL = new URL('/foo', 'https://example.org/');
// https://example.org/foo
inputやbaseが無効なURLsだったら、Type Errorを投げます.与えられた値は強制的に文字列に変換されます.たとえば:const { URL } = require('url');
const myURL = new URL({ toString: () => 'https://example.org/' });
// https://example.org/
inputホスト名に存在するUnicode文字は、Pnycodeアルゴリズムを使用して自動的にASCIIに変換されます.const { URL } = require('url');
const myURL = new URL('https:// ');
// https://xn--6qqa088eba/
5.URLSearch ParaamsURLSearch Parames APIはURLquery部分の読み書き権限を提供します.URLSearch Parames類も以下の4つの構成関数のいずれかと単独で使用できる.
たとえば:
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、domann ToASCII(domain)PnyCode ASCIIのプログレッシブなdomainを返します.domainが無効なドメイン名であれば、空の文字列に戻ります.それはurl.domann ToUnicaodeの逆演算を実行します.
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.domann ToUnicode(domain)Unicodeのプログレッシブなdomainを返します.domainが無効なドメイン名であれば、空の文字列を返します.
それはurl.domann ToASCIIの逆演算を実行します.
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'));
//