Node.js util-Modul

Java FileNode.js integrierte Module


In Node.jsutilDas Modul ist ein Kernmodul, das eine Reihe von Hilfsfunktionen bereitstellt. Diese Funktionen werden hauptsächlich verwendet, um Entwicklern bei der Bewältigung gängiger Programmieraufgaben zu helfen, wie z. B. Typprüfung, Vererbungsimplementierung, Debug-Ausgabe usw.utilDas Modul wurde ursprünglich entwickelt, um die Unzulänglichkeiten der nativen Funktionen von JavaScript auszugleichen und Entwicklern mehr Komfort zu bieten.

UmutilModul, Sie müssen es nur in Ihren Code importieren:

const util = require('util');

Hauptmerkmale des util-Moduls

1. Hilfsfunktionen zur Typprüfung

utilDas Modul bietet einige Funktionen zur Typprüfung, die präziser und nützlicher sind als die nativen JavaScript-typeofOperatoren.

util.types.isArrayBuffer(value)

Prüft, ob der angegebene Wert eine ArrayBuffer-Instanz ist.

Beispiel

const arrBuffer = new ArrayBuffer(8);
console.log(util.types.isArrayBuffer(arrBuffer)); // true
console.log(util.types.isArrayBuffer([])); // false

util.types.isDate(value)

Prüft, ob der angegebene Wert eine Date-Instanz ist.

Beispiel

console.log(util.types.isDate(new Date())); // true
console.log(util.types.isDate('2023-01-01')); // false

2. Hilfsfunktionen

util.format(format[, ...args])

Ähnlich wie printfprintfFunktion in der Sprache C, die zum Formatieren von Zeichenketten verwendet wird.

Beispiel

const name = 'John';
const age = 30;
console.log(util.format('Mein Name ist %s und ich bin %d Jahre alt', name, age));
// Ausgabe: Mein Name ist John und ich bin 30 Jahre alt

util.inspect(object[, options])

Gibt die String-Darstellung eines Objekts zurück, hauptsächlich zum Debuggen. Optionen wie depth und colors können konfiguriert werden.

Beispiel

const obj = {
  name: 'Alice',
  details: {
    age: 25,
    hobbies: ['reading', 'coding']
  }
};

console.log(util.inspect(obj, { depth: 2, colors: true }));

3. Callback-Stil-Konvertierung

util.promisify(original)

Konvertiert Funktionen, die dem Node.js-Callback-Stil folgen, in Funktionen, die Promises zurückgeben.

Beispiel

const fs = require('fs');
const readFile = util.promisify(fs.readFile);

async function readConfig() {
  try {
    const data = await readFile('config.json', 'utf8');
    console.log(data);
  } catch (err) {
    console.error('Fehler beim Lesen der Datei:', err);
  }
}

readConfig();

util.callbackify(original)

undpromisifyUmgekehrt werden Funktionen, die Promises zurückgeben, in Funktionen im Callback-Stil umgewandelt.

Beispiel

async function asyncFunc() {
  return 'Hello World';
}

const callbackFunc = util.callbackify(asyncFunc);

callbackFunc((err, result) => {
  if (err) throw err;
  console.log(result); // Hello World
});

4. Vererbungs-Dienstprogramme

util.inherits(constructor, superConstructor)

Implementiert Prototypenvererbung (ES5-Stil). Hinweis: In ES6 wird empfohlen, dasclassundextendsSchlüsselwort.

Beispiel

function Animal(name) {
  this.name = name;
}

Animal.prototype.speak = function() {
  console.log(this.name + ' macht ein Geräusch.');
};

function Dog(name) {
  Animal.call(this, name);
}

util.inherits(Dog, Animal);

Dog.prototype.speak = function() {
  console.log(this.name + ' bellt.');
};

const d = new Dog('Rex');
d.speak(); // Rex bellt.

Praktische Anwendungsszenarien des util-Moduls

1. Debugging komplexer Objekte

Wenn Sie die Struktur eines komplexen Objekts ausgeben müssen,util.inspectist leistungsfähiger als einfachesconsole.logconsole.log:

Beispiel

const complexObj = {
  date: new Date(),
  regex: /test/g,
  nested: {
    array: [1, 2, 3],
    fn: function() {}
  }
};

console.log(util.inspect(complexObj, {
  showHidden: true,
  depth: null,
  colors: true
}));

2. Modernisierung von altem Code

Konvertieren Sie alten Code im Callback-Stil in den Promise-Stil:

Beispiel

// Alter Code im Callback-Stil
function oldStyleFunc(param, callback) {
  // Einige asynchrone Operationen
  setTimeout(() => {
    callback(null, `Result for ${param}`);
  }, 100);
}

// In Promise-Stil konvertieren
const newStyleFunc = util.promisify(oldStyleFunc);

async function useNewStyle() {
  const result = await newStyleFunc('test');
  console.log(result); // Ergebnis für Test
}

useNewStyle();

3. Benutzerdefinierte Objektinspektion

Sie können die Darstellung des Objekts anpasseninspectMethode zum Ändernutil.inspectdie Ausgabe von util.inspect:

Beispiel

class CustomObject {
  constructor(value) {
    this.value = value;
  }
 
  [util.inspect.benutzerdefinierte](Tiefen, optionen) {
    return `CustomObject: ${this.value}`;
  }
}

const obj = new CustomObject('test');
console.log(util.inspect(obj)); // CustomObject: test

Hinweise

  1. Leistungsüberlegungen:util.inspectBei großen Objekten kann es zu Leistungseinbußen kommen; in Produktionsumgebungen mit Vorsicht verwenden.
  2. API-Stabilität: ObwohlutilDas Modul ist ein Kernmodul, aber einige APIs können weiterhin als experimentelle Funktionen gekennzeichnet sein.
  3. Moderne Alternativen: Einige Funktionen (wie zum Beispielutil.inherits) haben bessere Alternativen in modernem JavaScript (wie dieclassSyntax).
  4. Fehlerbehandlung: Bei der Verwendung vonpromisifystellen Sie sicher, dass Fehler korrekt behandelt werden, um unbehandelte Promise-Rejections zu vermeiden.

Methoden und Eigenschaften

Methode/Eigenschaft Beschreibung Eingeführt in Version
util.callbackify(original) Wandelt eine async-Funktion, die ein Promise zurückgibt, in eine Funktion im Callback-Stil um. 8.2.0
util.debuglog(section) Erstellt eine Funktion, die nur dann Nachrichten protokolliert, wenn die Umgebungsvariable NODE_DEBUG den angegebenen Abschnitt enthält. 0.11.3
util.deprecate(fn, msg[, code]) Umschließt eine Funktion, sodass sie beim Aufruf eine Deprecation-Warnung ausgibt. 0.8.0
util.format(format[, ...args]) Formatiert eine Zeichenfolge, wobei das erste Argument als printf-ähnliche Formatzeichenfolge verwendet wird. 0.5.3
util.formatWithOptions(inspectOptions, format[, ...args]) Ähnlich wie util.format(), akzeptiert aber inspect-Optionen. 10.0.0
util.getSystemErrorName(err) Gibt den Systemfehlernamen zurück, der durch den Fehlercode err repräsentiert wird. 9.7.0
util.inherits(constructor, superConstructor) Vererbt die Prototypmethoden von einem Konstruktor auf einen anderen Konstruktor (veraltet; es wird empfohlen, ES6 class und extends zu verwenden). 0.3.0
util.inspect(object[, options]) Gibt die Stringdarstellung von object zurück, die zum Debuggen verwendet wird. 0.3.0
util.isDeepStrictEqual(val1, val2) Prüft, ob zwei Werte tiefgehend streng gleich sind. 9.0.0
util.promisify(original) Konvertiert eine Funktion im Callback-Stil in eine Funktion, die ein Promise zurückgibt. 8.0.0
util.stripVTControlCharacters(str) Entfernt ANSI-Escape-Codes aus einer Zeichenfolge. 16.11.0
util.TextDecoder Alias für die WHATWG-Standardimplementierung von TextDecoder. 8.3.0
util.TextEncoder Alias für die WHATWG-Standardimplementierung von TextEncoder. 8.3.0
util.types Stellt ein Hilfsobjekt für verschiedene Node.js-Typprüfungen bereit. 10.0.0
util.aborted(err, signal) Prüft, ob ein Fehler durch ein Abbruchsignal verursacht wird. 18.18.0
util.parseArgs([config]) Hilfsfunktion zum Parsen von Befehlszeilenargumenten. 18.3.0

Von util.types bereitgestellte Methoden

Methode Beschreibung
util.types.isAnyArrayBuffer(value) Prüft, ob es sich um eine AnyArrayBuffer-Instanz handelt.
util.types.isArrayBuffer(value) Prüft, ob es sich um eine ArrayBuffer-Instanz handelt.
util.types.isAsyncFunction(value) Prüft, ob es eine asynchrone Funktion ist.
util.types.isBigInt64Array(value) Prüft, ob es sich um eine BigInt64Array-Instanz handelt.
util.types.isBigUint64Array(value) Prüft, ob es sich um eine BigUint64Array-Instanz handelt.
util.types.isBooleanObject(value) Prüft, ob es sich um ein Boolean-Objekt handelt.
util.types.isBoxedPrimitive(value) Prüft, ob es sich um ein geboxtes Primitiv handelt.
util.types.isCryptoKey(value) Prüft, ob es sich um eine CryptoKey-Instanz handelt.
util.types.isDataView(value) Prüft, ob es sich um eine DataView-Instanz handelt.
util.types.isDate(value) Prüft, ob es sich um eine Date-Instanz handelt.
util.types.isExternal(value) Prüft, ob es sich um einen externen nativen Wert handelt.
util.types.isFloat32Array(value) Prüft, ob es sich um eine Float32Array-Instanz handelt.
util.types.isFloat64Array(value) Prüft, ob es sich um eine Float64Array-Instanz handelt.
util.types.isGeneratorFunction(value) Prüft, ob es sich um eine Generatorfunktion handelt.
util.types.isGeneratorObject(value) Prüft, ob es sich um ein Generatorobjekt handelt.
util.types.isInt8Array(value) Prüft, ob es sich um eine Int8Array-Instanz handelt.
util.types.isInt16Array(value) Prüft, ob es sich um eine Int16Array-Instanz handelt.
util.types.isInt32Array(value) Prüft, ob es sich um eine Int32Array-Instanz handelt.
util.types.isMap(value) Prüft, ob es sich um eine Map-Instanz handelt.
util.types.isMapIterator(value) Prüft, ob es sich um einen Map-Iterator handelt.
util.types.isModuleNamespaceObject(value) Prüft, ob es sich um ein Modul-Namespace-Objekt handelt.
util.types.isNativeError(value) Prüft, ob es sich um ein natives Fehlerobjekt handelt.
util.types.isNumberObject(value) Prüft, ob es sich um ein Number-Objekt handelt.
util.types.isPromise(value) Prüft, ob es sich um ein Promise handelt.
util.types.isProxy(value) Prüft, ob es sich um ein Proxy-Objekt handelt.
util.types.isRegExp(value) Prüft, ob es sich um ein RegExp-Objekt handelt.
util.types.isSet(value) Prüft, ob es sich um eine Set-Instanz handelt.
util.types.isSetIterator(value) Prüft, ob es sich um einen Set-Iterator handelt.
util.types.isSharedArrayBuffer(value) Prüft, ob es sich um eine SharedArrayBuffer-Instanz handelt.
util.types.isStringObject(value) Prüft, ob es sich um ein String-Objekt handelt.
util.types.isSymbolObject(value) Prüft, ob es sich um ein Symbol-Objekt handelt.
util.types.isTypedArray(value) Prüft, ob es sich um eine TypedArray-Instanz handelt.
util.types.isUint8Array(value) Prüft, ob es sich um eine Uint8Array-Instanz handelt.
util.types.isUint8ClampedArray(value) Prüft, ob es sich um eine Uint8ClampedArray-Instanz handelt.
util.types.isUint16Array(value) Prüft, ob es sich um eine Uint16Array-Instanz handelt.
util.types.isUint32Array(value) Prüft, ob es sich um eine Uint32Array-Instanz handelt.
util.types.isWeakMap(value) Prüft, ob es sich um eine WeakMap-Instanz handelt.
util.types.isWeakSet(value) Prüft, ob es sich um eine WeakSet-Instanz handelt.

Zusammenfassung

von Node.jsutilDas Modul bietet viele praktische Hilfsfunktionen, mit denen Entwickler Code effizienter schreiben können. Von der Typprüfung über asynchrone Ablaufsteuerung bis hin zur Debug-Ausgabe,utilDas Modul deckt viele gängige Entwicklungsanforderungen ab. Obwohl modernes JavaScript bereits viele native Lösungen bietet,utilDas Modul ist in Szenarien weiterhin sehr nützlich, insbesondere beim Umgang mit Legacy-Code oder wenn bestimmte Hilfsfunktionen benötigt werden.

MeisternutilDie Verwendung des Moduls kann Ihre Node.js-Entwicklung komfortabler und effizienter machen, insbesondere beim Debugging und bei der Code-Konvertierung.

Java FileNode.js integrierte Module