Node.js Util
8805 ワード
utilはNode.jsのコアモジュールであり、コアJavaScript機能があまりにも簡素化されていないことを補うために、常用関数のセットを提供している.utilモジュール設計の主な目的はNode.js内部APIの需要を満たすためである.
フォーマット文字列
formatパラメータは、ゼロまたは複数のプレースホルダを含む文字列で、各プレースホルダは1%の文字で始まり、最終的には対応するパラメータに変換された文字列値に置き換えられます.
プレースホルダ
説明
%s
文字列を指定
%d
数値を指定
%j
JSONを文字列に変換できるオブジェクトを指定します.
%o
Objectには、列挙できない属性が含まれています.
%O
Objectには、列挙できない属性が含まれていません.
%
%の後に空のままであればプレースホルダとしません.
%
出力%
format関数を使うときは注意が必要です.パラメータがプレースホルダなしでは、余分なプレースホルダは置換されません. は、プレースホルダよりも多くのパラメータがある場合、余分なパラメータを文字列に変換し、スペース区切り記号で接続します. は、最初のパラメータが文字列をフォーマットしていない場合、各パラメータを文字列に変換し、スペース区切り記号を使って接続し、接続後の文字列を返します.
説明
object
変換するオブジェクト
show Hdden
オプションとして、エニュメレート・オブジェクトの隠し属性を表します.デフォルトのfalseは、trueであれば、より多くの隠し情報を出力します.
depth
オプションとして、最大再帰層数を表します.すなわち、オブジェクトのエニュメレート・明示的な深さを設定します.デフォルトでは2です.nullとして指定されている場合は、再帰層数を制限せずに完全に巡回します.
colors
オプションとして、colorsはtrueであり、出力フォーマットはANSI色で符号化され、端末表示のために使用される.
例えば、オブジェクトが文字列に変換され、明示的に情報を隠します.
utilモジュールは、標準入力stdoutと標準エラーstderに同期してデータを書き込む能力を有し、プロセスがデータが書き出されるまでブロックされることを意味する.現在のデータが書き込まれていることを確認するために使用できますが、システムはその動作を変更していません.
関数
説明
util.debug(string)
標準エラーstderに文字列を書き込み、古いものはconsosone.error()で代用します.
util.error([...])
複数のパラメータを受け入れて、標準エラーsterに書き込みます.もう古い時には、consolie.error()を使って代用します.
util.puts(…)
複数のパラメータを受け入れて標準出力stdoutに書き込みます.古いものはconsolone.log()で置き換えられます.
util.print(…)
複数のパラメータを受け入れて文字列に変換し、標準出力stdoutに書き込みます.
util.log(string)
文字列とタイムスタンプを標準出力stdoutに書き込みます.
コンソール標準出力
検査対象の種類
オブジェクトの種類を判断する最も一般的な方法は、instance of演算子を使用して、utilモジュールは、一般的な便利な関数を提供します.
説明
util.isAray(object)
与えられたオブジェクトが行列かどうかを判断します.
util.isDate(object)
与えられたオブジェクトが日付であるかどうかを判断します.
util.isReg Exp(object)
与えられたオブジェクトが正則かどうかを判断します.
util.isError(object)
与えられたオブジェクトがエラーであるかどうかを判断します.
オブジェクトが行列
例えば、inheits方法を使用して、events.EventEmitterイベントフリップフロップオブジェクトの構造関数を継承して、Writable書き込みストリームを作成します.
例えば、async/awaitと連携してutil.promisifyを使ってファイルの内容を非同期的に読み取る.
const util = require("util");
Node.jsのutilモジュールは、文字列をフォーマットし、対象を文字列に変換し、対象のタイプをチェックし、出力ストリームに対する同期書き込みを実行し、オブジェクトの継承を強化する実用的な関数を提供する.フォーマット文字列
format
文字列の処理には通常、文字列の高速フォーマットが必要であり、Node.jsはutilモジュールで文字列のフォーマットを処理するための基本的な文字列フォーマット方法を提供しています.util.format(format, [...])
util.form()関数は、最初のパラメータとしてフォーマット文字列formatを受信し、書式設定された文字列を返します.formatパラメータは、ゼロまたは複数のプレースホルダを含む文字列で、各プレースホルダは1%の文字で始まり、最終的には対応するパラメータに変換された文字列値に置き換えられます.
プレースホルダ
説明
%s
文字列を指定
%d
数値を指定
%j
JSONを文字列に変換できるオブジェクトを指定します.
%o
Objectには、列挙できない属性が含まれています.
%O
Objectには、列挙できない属性が含まれていません.
%
%の後に空のままであればプレースホルダとしません.
%
出力%
format関数を使うときは注意が必要です.
console.log(util.format("%s = %s", "alice"));//alice = %s
console.log(util.format("%s = %s", "name", "alice", 18));//name = alice 18
console.log(util.format(1,2,3));//1 2 3
オブジェクト変換文字列inspect
util.inspect(object, [showHidden], [depth], [colors])
util.inspect(object[, options])
inspectは、任意のオブジェクトを文字列に変換する方法で、デバッグとエラー出力に使用されます.これは少なくとも一つのパラメータobjectを受け入れると、変換が必要なオブジェクトです.function Klass(){
this.name = "alice";
this.toString = function(){
return this.name;
}
}
const obj = new Klass();
console.log(util.inspect(obj));//Klass { name: 'alice', toString: [Function] }
パラメータ説明
object
変換するオブジェクト
show Hdden
オプションとして、エニュメレート・オブジェクトの隠し属性を表します.デフォルトのfalseは、trueであれば、より多くの隠し情報を出力します.
depth
オプションとして、最大再帰層数を表します.すなわち、オブジェクトのエニュメレート・明示的な深さを設定します.デフォルトでは2です.nullとして指定されている場合は、再帰層数を制限せずに完全に巡回します.
colors
オプションとして、colorsはtrueであり、出力フォーマットはANSI色で符号化され、端末表示のために使用される.
例えば、オブジェクトが文字列に変換され、明示的に情報を隠します.
console.log(util.inspect(obj, true));
Klass {
name: 'alice',
toString:
{ [Function]
[length]: 0,
[name]: '',
[arguments]: null,
[caller]: null,
[prototype]: { [constructor]: [Circular] } } }
例えば、JSONオブジェクトは文字列を回転します.const obj = {id:1, name:"alice"}
console.log(util.inspect(obj, true));//{ id: 1, name: 'alice' }
同期書込み出力ストリームutilモジュールは、標準入力stdoutと標準エラーstderに同期してデータを書き込む能力を有し、プロセスがデータが書き出されるまでブロックされることを意味する.現在のデータが書き込まれていることを確認するために使用できますが、システムはその動作を変更していません.
関数
説明
util.debug(string)
標準エラーstderに文字列を書き込み、古いものはconsosone.error()で代用します.
util.error([...])
複数のパラメータを受け入れて、標準エラーsterに書き込みます.もう古い時には、consolie.error()を使って代用します.
util.puts(…)
複数のパラメータを受け入れて標準出力stdoutに書き込みます.古いものはconsolone.log()で置き換えられます.
util.print(…)
複数のパラメータを受け入れて文字列に変換し、標準出力stdoutに書き込みます.
util.log(string)
文字列とタイムスタンプを標準出力stdoutに書き込みます.
コンソール標準出力
util.log
util.log(string)
logメソッドは、コンソール標準でstdoutを出力するときにタイムスタンプが付いています.util.log("hello world");//21 Dec 12:42:07 - hello world
デバッグ出力util.debuglog
util.debuglog(section)
debuglog方法はNODE_によるものです.DEBUG環境変数は、debug情報を選択的に出力します.検査対象の種類
オブジェクトの種類を判断する最も一般的な方法は、instance of演算子を使用して、utilモジュールは、一般的な便利な関数を提供します.
console.log([] instanceof Array);//true
判定関数説明
util.isAray(object)
与えられたオブジェクトが行列かどうかを判断します.
util.isDate(object)
与えられたオブジェクトが日付であるかどうかを判断します.
util.isReg Exp(object)
与えられたオブジェクトが正則かどうかを判断します.
util.isError(object)
与えられたオブジェクトがエラーであるかどうかを判断します.
オブジェクトが行列
util.isArray
かどうかをチェックします.util.isArray(object)
isarray方法は、着信先のobjectが配列であるかどうかを確認し、ブール値に戻り、trueがfalseであるかどうかを調べるために使用される.console.log(util.isArray([]));//true
console.log(util.isArray(new Array));//true
console.log(util.isArray({}));//false
チェック対象がDateタイプかどうかutil.isDate
util.isDate(object)
isDate方法は、入力されたオブジェクトのobjectがDate日付タイプであるかどうかを確認し、ブール値を返します.trueがfalseであるかどうかを確認します.console.log(util.isDate({}));//false
console.log(util.isDate(new Date()));//true
console.log(util.isDate(Date()));//false
オブジェクトがErrerタイプかどうかを確認するutil.isError
.util.isError(object)
ISErr方法は、オブジェクトがErrタイプかどうかを確認し、ブール値を返します.trueがfalseであるかどうかを確認します.console.log( util.isError({name:"Error", message:"an error occurred"}) );//false
console.log( util.isError(new Error()) );//true
console.log( util.isError(new TypeError()) );//true
オブジェクトが正規表現であるかどうかを確認するutil.isRegExp
.util.isRegExp(object)
isRegExp方法は、与えられたオブジェクトのobjetがRegExp正規表現であるかどうかを確認し、ブール値を返します.trueがfalseであるかどうかを確認します.console.log( util.isRegExp({}) );//false
console.log( util.isRegExp(/regexp rule/) );//true
console.log( util.isRegExp(new RegExp("pattern")) );//true
オブジェクトプロトタイプ引継ぎutil.inherits
inheits法はオブジェクト間のプロトタイプ継承を実現するために用いられ、JavaScriptのオブジェクト指向特性はプロトタイプに基づいており、ベースクラスとは異なる.JavaScriptでは対象継承の言語レベル特性が提供されておらず、プロトタイプコピーにより実現されます.util.inherits(constructor, superConstructor)
inheits法は他のオブジェクトからプロトタイプのプロトタイプを継承する方法のオブジェクトを作成することを可能にする.新しいオブジェクトを作成すると、プロトタイプのプロトタイプ方法が自動的に使用されます.const util = require("util");
//
function Base(opts){
//
this.id = opts.id || 0;
this.name = opts.name || "";
//
this.output = function(){
console.log(this.id, this.name);
};
}
//
Base.prototype.getName = function(){
return this.name;
};
//
function Sub(opts){
//
Base.call(this, opts)
//
this.name = "subname";
//
this.type = opts.type||"";
}
//
util.inherits(Sub, Base);
//
const sub = new Sub({id:1, type:"subtype"});
console.log(sub);//Sub { id: 1, name: 'subname', output: [Function], type: 'subtype' }
//
console.log(sub.getName());//subname
新しいオブジェクトが作成されたときにプロトタイプのconstructorを実行し、constructor.super_
属性を使用してカスタマイズされたオブジェクトのコンストラクタから父類コンストラクタにアクセスすることができます.例えば、inheits方法を使用して、events.EventEmitterイベントフリップフロップオブジェクトの構造関数を継承して、Writable書き込みストリームを作成します.
const util = require("util");
const EventEmitter = require("events").EventEmitter;
//
function Writer(){
EventEmitter.call(this);
}
//
util.inherits(Writer, EventEmitter);
//
Writer.prototype.write = function(data){
this.emit("data", data);
};
//
const writer = new Writer();
//
console.log(writer instanceof EventEmitter);//true
// writer data
writer.on("data", function(data){
console.log("receive data:", data);//receive data: hello world
});
// data
writer.write("hello world");
console.log(writer);
Writer {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined }
スタイル変換util.promisify
Node.jsのコールバック関数は、約束に従って統一された形式、すなわち(error, value) => {}
を有する.このようなコールバック関数はパラメータの関数としてPromiseを返す関数に変換することができる.例えば、async/awaitと連携してutil.promisifyを使ってファイルの内容を非同期的に読み取る.
const util = require("util");
const fs = require("fs");
const asyncReadFile = util.promisify(fs.readFile);
async function main(file, charset = "utf-8"){
const content = await asyncReadFile(file, charset);
//console.log(content);
return content;
}
main("./README.md").then(data=>{
console.log(data);
});
例えば、フォルダ統計情報の取得const util = require("util");
const fs = require("fs");
const stats = util.promisify(fs.stat);
async function main(dirname){
const content = await stats(dirname);
//console.log(content);
return content;
}
main(".").then(data=>{
console.log(data);
}).catch(error=>{
console.log(error);
});
Stats {
dev: 1650279073,
mode: 16822,
nlink: 1,
uid: 0,
gid: 0,
rdev: 0,
blksize: undefined,
ino: 9007199255333340,
size: 0,
blocks: undefined,
atimeMs: 1576835786059.209,
mtimeMs: 1576835772463.417,
ctimeMs: 1576835772463.417,
birthtimeMs: 1576232793857.817,
atime: 2019-12-20T09:56:26.059Z,
mtime: 2019-12-20T09:56:12.463Z,
ctime: 2019-12-20T09:56:12.463Z,
birthtime: 2019-12-13T10:26:33.858Z }