Node.js Allgemeine Dienstprogramme
utilDas Modul ist ein eingebautes Modul von Node.js und enthält Hilfsfunktionen, die Debugging, Fehlerbehandlung, Formatierung und andere Funktionen in der JavaScript-Programmierung unterstützen.
utilBietet eine Sammlung häufig verwendeter Funktionen, um die allzu einfache Funktionalität des JavaScript-Kerns auszugleichen.
utilDie Funktionen im Modul decken verschiedene Aspekte ab, von der Objektinspektion über Vererbung bis hin zur String-Formatierung.
Das util-Modul importieren
Zuerst müssen Sie das util-Modul importieren:
const util = require('util');
Häufige Methoden:
| Methode | Beschreibung |
|---|---|
util.format(format, ...args) | String-Formatierung, unterstützt%s、%d、%jPlatzhalter. |
util.inspect(object[, options]) | Konvertiert ein Objekt zum Debuggen in einen String. |
util.promisify(function) | Konvertiert Funktionen im Callback-Stil in Funktionen, die ein Promise zurückgeben. |
util.callbackify(fn) | Konvertiert Promise-returnierende Funktionen in Funktionen im Callback-Stil. |
util.inherits(constructor, superConstructor) | Bewirkt, dass ein Konstruktor die Prototypmethoden eines anderen Konstruktors erbt. |
util.deprecate(fn, message) | Markiert eine Funktion als veraltet und gibt beim Aufruf eine Warnmeldung aus. |
util.types | Eine Sammlung mit mehreren Methoden zur Typenerkennung, wie z. B.isAnyArrayBuffer、isBigInt64Array。 |
util.isDeepStrictEqual(val1, val2) | Ermittelt, ob zwei Werte tiefgehend gleich sind, ähnlich wie bei deep equal. |
util.getSystemErrorName(err) | Gibt den Systemfehlernamen basierend auf dem Fehlercode zurück. |
util.inspect.custom | Ein Symbol, das benutzerdefiniertesinspectVerhalten für das Debugging ermöglicht. |
Methoden zur Typenerkennung unter util.types
util.types ist eine Sammlung vieler Methoden zur Typenerkennung, die JavaScripts typeof und instanceof erweitern.
| Methode | Beschreibung |
|---|---|
util.types.isAnyArrayBuffer(value) | Prüft, ob der Wert istArrayBufferoderSharedArrayBuffer。 |
util.types.isArrayBuffer(value) | Prüft, ob der Wert istArrayBuffer。 |
util.types.isAsyncFunction(value) | Prüft, ob der Wert eine async-Funktion ist. |
util.types.isBigInt64Array(value) | Prüft, ob der Wert istBigInt64Array。 |
util.types.isBigUint64Array(value) | Prüft, ob der Wert istBigUint64Array。 |
util.types.isBooleanObject(value) | Prüft, ob der Wert ein Boolean-Objekt ist. |
util.types.isDataView(value) | Prüft, ob der Wert istDataView。 |
util.types.isDate(value) | Prüft, ob der Wert istDate。 |
util.types.isGeneratorFunction(value) | Prüft, ob der Wert eine Generatorfunktion ist. |
util.types.isMap(value) | Prüft, ob der Wert istMap。 |
util.types.isSet(value) | Prüft, ob der Wert istSet。 |
util.types.isRegExp(value) | Prüft, ob der Wert ein regulärer Ausdruck ist. |
util.types.isSymbolObject(value) | Prüft, ob der Wert ein Symbol-Objekt ist. |
Anwendungsbeispiele
util.format() - String-Formatierung
util.format() wird verwendet, um formatierte Zeichenketten zu erzeugen, und unterstützt Platzhalter wie %s, %d und %j, die für Zeichenketten, Zahlen bzw. JSON stehen.
Beispiel
const name = 'Alice';
const age = 25;
console.log(util.format('Name: %s, Age: %d', name, age)); // Ausgabe: Name: Alice, Age: 25
util.promisify() - Callback-Funktionen in Promise umwandeln
util.promisify() wandelt traditionelle Funktionen im Callback-Stil in Funktionen um, die ein Promise zurückgeben, sodass sie mit async/await verwendet werden können.
Beispiel
const fs = require('fs');
// Konvertiert callback-basiertes fs.readFile in eine Funktion, die ein Promise zurückgibt
const readFileAsync = util.promisify(fs.readFile);
(async () => {
try {
const data = await readFileAsync('example.txt', 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}
})();
util.callbackify() - Promise in Callback umwandeln
util.callbackify() wandelt Funktionen, die ein Promise zurückgeben, in Funktionen im Callback-Stil um und macht sie dadurch bequem einsetzbar in Codeumgebungen, die Callbacks erfordern.
util.callbackify(original)wirdasyncEine async-Funktion (oder eine Funktion, deren RückgabewertPromisefunction) wird nach der Error-First-Konvention in eine Funktion im Callback-Stil umgewandelt, die zum Beispiel(err, value) => ...callback als letzten Parameter entgegennimmt.Promiseauflöst, wird esnull), und der zweite Parameter ist der aufgelöste Wert.
Beispiel
async function fn() {
return 'hello world';
}
const callbackFunction = util.callbackify(fn);
callbackFunction((err, ret) => {
if (err) throw err;
console.log(ret);
});
Die Ausgabe des obigen Codes ist:
hello world
Die Callback-Funktion wird asynchron ausgeführt und bietet Fehlerverfolgung für Ausnahme-Stapel. Wenn die Callback-Funktion eine Ausnahme auslöst, löst der Prozess eine 'uncaughtException'-Ausnahme aus; wenn sie nicht abgefangen wird, wird der Prozess beendet.
null hat eine besondere Bedeutung als Parameter in der Callback-Funktion. Wenn der erste Parameter der Callback-Funktion der Grund für die Ablehnung eines Promise ist und einen Rückgabewert hat, und der Wert in den booleschen Wert false konvertiert werden kann, wird dieser Wert in ein Error-Objekt verpackt und kann über die reason-Eigenschaft abgerufen werden.
function fn() {
return Promise.reject(null);
}
const callbackFunction = util.callbackify(fn);
callbackFunction((err, ret) => {
// 当 Promise 被以 `null` 拒绝时,它被包装为 Error 并且原始值存储在 `reason` 中。
err && err.hasOwnProperty('reason') && err.reason === null; // true
});
original ist eine async-Funktion. Diese Funktion gibt eine traditionelle Callback-Funktion zurück.
util.deprecate() - Eine Funktion als veraltet markieren
util.deprecate() wird verwendet, um Funktionen zu markieren, deren Verwendung nicht empfohlen wird, und beim Aufruf wird eine Warnmeldung angezeigt.
Beispiel
const oldFunction = util.deprecate(() => {
console.log('Diese Funktion ist veraltet');
}, 'oldFunction ist veraltet. Verwenden Sie stattdessen newFunction.');
oldFunction(); // Beim Aufruf wird eine Warnung angezeigt
util.types - Datentyp-Erkennung
util.types bietet eine Reihe von Methoden zur Erkennung bestimmter Datentypen und erweitert die Funktionalität von typeof und instanceof.
Beispiel
console.log(util.types.isDate(new Date())); // true
console.log(util.types.isMap(new Map())); // true
util.inherits
util.inherits(constructor, superConstructor)ist eine Funktion, die Prototyp-Vererbung zwischen Objekten implementiert.
Die objektorientierten Funktionen von JavaScript basieren auf Prototypen, im Gegensatz zum üblichen klassenbasierten Ansatz. JavaScript bietet keine Sprachfunktionen für Objektvererbung, sondern implementiert sie durch Prototyp-Kopieren.
Hier stellen wir nur die Verwendung von util.inherits vor; das Beispiel sieht wie folgt aus:
var util = require('util');
function Base() {
this.name = 'base';
this.base = 1991;
this.sayHello = function() {
console.log('Hello ' + this.name);
};
}
Base.prototype.showName = function() {
console.log(this.name);
};
function Sub() {
this.name = 'sub';
}
util.inherits(Sub, Base);
var objBase = new Base();
objBase.showName();
objBase.sayHello();
console.log(objBase);
var objSub = new Sub();
objSub.showName();
//objSub.sayHello();
console.log(objSub);
Wir definieren ein Basisobjekt Base und ein Sub, das von Base erbt. Base hat drei im Konstruktor definierte Eigenschaften und eine im Prototyp definierte Funktion. Die Vererbung wird durch util.inherits implementiert. Das Ausführungsergebnis sieht wie folgt aus:
base
Hello base
{ name: 'base', base: 1991, sayHello: [Function] }
sub
{ name: 'sub' }
Hinweis:Sub erbt nur die von Base im Prototyp definierte Funktion, während die im Konstruktor erstellte Eigenschaft base und die Funktion sayHello nicht von Sub geerbt werden.
Gleichzeitig werden im Prototyp definierte Eigenschaften von console.log nicht als Objekteigenschaften ausgegeben. Wenn wir den Kommentar in der Zeile objSub.sayHello(); entfernen, sehen wir:
node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ TypeError: Object #<Sub> has no method 'sayHello' at Object.<anonymous> (/home/byvoid/utilinherits.js:29:8) at Module._compile (module.js:441:26) at Object..js (module.js:459:10) at Module.load (module.js:348:31) at Function._load (module.js:308:12) at Array.0 (module.js:479:10) at EventEmitter._tickCallback (node.js:192:40)
Hinweis:Vor ES6 war util.inherits die Hauptmethode zur Implementierung von Vererbung in Node.js. Nach ES6 wird jedoch empfohlen, die Syntax class und extends zu verwenden, wodurch der Vererbungscode besser lesbar wird.
util.inspect() - Objektstruktur ausgeben
util.inspect(object[, options]): Konvertiert ein Objekt in eine Zeichenfolgendarstellung zum einfachen Debuggen.
util.inspect() konvertiert ein Objekt in eine Zeichenfolgenform, die häufig beim Debuggen verwendet wird, um die detaillierte Struktur und die Eigenschaften des Objekts anzuzeigen. Sie können den Parameter options angeben, um das Ausgabeformat zu steuern.
Beispiel
const obj = { a: 1, b: 2, c: { d: 3 } };
console.log(util.inspect(obj, { showHidden: false, depth: null, colors: true }));
util.isArray(object)
Gibt true zurück, wenn der angegebene Parameter "object" ein Array ist, andernfalls wird false zurückgegeben.
var util = require('util');
util.isArray([])
// true
util.isArray(new Array)
// true
util.isArray({})
// false
util.isRegExp(object)
Gibt true zurück, wenn der angegebene Parameter "object" ein regulärer Ausdruck ist, andernfalls wird false zurückgegeben.
var util = require('util');
util.isRegExp(/some regexp/)
// true
util.isRegExp(new RegExp('another regexp'))
// true
util.isRegExp({})
// false
util.isDate(object)
Gibt true zurück, wenn der angegebene Parameter "object" ein Date ist, andernfalls wird false zurückgegeben.
var util = require('util');
util.isDate(new Date())
// true
util.isDate(Date())
// false (without 'new' returns a String)
util.isDate({})
// false
Weitere Informationen finden Sie unterhttp://nodejs.org/api/util.html, um mehr zu erfahren.
Weitere Erweiterungen