Module util de Node.js
Dans Node.jsutilLe module est un module central qui fournit une série de fonctions utilitaires. Ces fonctions servent principalement à aider les développeurs à accomplir des tâches de programmation courantes, telles que la vérification de type, l'implémentation de l'héritage, la sortie de débogage, etc.utilLe module a été conçu à l'origine pour compenser les lacunes des fonctionnalités natives de JavaScript et offrir aux développeurs davantage de commodité.
Pour utiliserutilmodule, il vous suffit de l'importer dans votre code :
const util = require('util');
Principales fonctionnalités du module util
1. Utilitaires de vérification de type
utilLe module fournit certaines fonctions de vérification de type, qui sont plus précises et utiles que lestypeofopérateurs natifs de JavaScript.
util.types.isArrayBuffer(value)
Vérifie si la valeur donnée est une instance d'ArrayBuffer.
Exemple
console.log(util.types.isArrayBuffer(arrBuffer)); // vrai
console.log(util.types.isArrayBuffer([])); // false
util.types.isDate(value)
Vérifie si la valeur donnée est une instance de Date.
Exemple
console.log(util.types.isDate('2023-01-01')); // false
2. Fonctions utilitaires
util.format(format[, ...args])
Semblable à printfprintffonction du langage C, utilisée pour formater des chaînes.
Exemple
const age = 30;
console.log(util.format('Je m'appelle %s et j'ai %d ans', name, age));
// Sortie : Je m'appelle John et j'ai 30 ans
util.inspect(object[, options])
Renvoie la représentation sous forme de chaîne d'un objet, principalement pour le débogage. Des options telles que depth et colors peuvent être configurées.
Exemple
name: 'Alice',
details: {
age: 25,
hobbies: ['reading', 'coding']
}
};
console.log(util.inspect(obj, { depth: 2, colors: true }));
3. Conversion du style de rappel
util.promisify(original)
Convertit les fonctions qui suivent le style de rappel Node.js en fonctions qui renvoient des Promesses.
Exemple
const readFile = util.promisify(fs.readFile);
async function readConfig() {
try {
const data = await readFile('config.json', 'utf8');
console.log(data);
} catch (err) {
console.error('Erreur de lecture du fichier :', err);
}
}
readConfig();
util.callbackify(original)
etpromisifyInversement, convertit les fonctions qui renvoient des promesses en fonctions de style callback.
Exemple
return 'Hello World';
}
const callbackFunc = util.callbackify(asyncFunc);
callbackFunc((err, result) => {
if (err) throw err;
console.log(result); // Hello World
});
4. Utilitaires d'héritage
util.inherits(constructor, superConstructor)
Implémente l'héritage prototypique (style ES5). Remarque : En ES6, il est recommandé d'utiliser leclassetextendsmot-clé.
Exemple
this.name = name;
}
Animal.prototype.speak = function() {
console.log(this.name + ' fait un bruit.');
};
function Dog(name) {
Animal.call(this, name);
}
util.inherits(Dog, Animal);
Dog.prototype.speak = function() {
console.log(this.name + ' aboie.');
};
const d = new Dog('Rex');
d.speak(); // Rex aboie.
Scénarios d'application pratiques du module util
1. Débogage d'objets complexes
Lorsque vous devez afficher la structure d'un objet complexe,util.inspectest plus puissant que simpleconsole.logconsole.log:
Exemple
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. Modernisation du code ancien
Convertir du code ancien de style callback en style Promise:
Exemple
function oldStyleFunc(param, callback) {
// Quelques opérations asynchrones
setTimeout(() => {
callback(null, `Result for ${param}`);
}, 100);
}
// Convertir en style Promise
const newStyleFunc = util.promisify(oldStyleFunc);
async function useNewStyle() {
const result = await newStyleFunc('test');
console.log(result); // Résultat pour test
}
useNewStyle();
3. Inspection personnalisée d'objet
Vous pouvez personnaliser l'objetinspectméthode pour modifierutil.inspectla sortie de util.inspect :
Exemple
constructor(value) {
this.value = value;
}
[util.inspect.custom](depth, options) {
return `CustomObject: ${this.value}`;
}
}
const obj = new CustomObject('test');
console.log(util.inspect(obj)); // CustomObject: test
Notes
- Considérations de performance:
util.inspectPour les objets volumineux, il peut y avoir un impact sur les performances ; utilisez avec prudence dans les environnements de production. - Stabilité de l'API: Bien que
utilLe module est un module principal, mais certaines API peuvent encore être marquées comme fonctionnalités expérimentales. - Alternatives modernes: Certaines fonctionnalités (telles que
util.inherits) ont de meilleures alternatives en JavaScript moderne (comme laclasssyntaxe). - Gestion des erreurs: Lors de l'utilisation
promisifyassurez-vous de gérer correctement les erreurs afin d'éviter les rejets de Promise non gérés.
Méthodes et propriétés
| Méthode/Propriété | Description | Version introduite |
|---|---|---|
| util.callbackify(original) | Convertit une fonction asynchrone qui renvoie une Promise en une fonction de style callback. | 8.2.0 |
| util.debuglog(section) | Crée une fonction qui journalise des messages uniquement lorsque la variable d'environnement NODE_DEBUG contient la section spécifiée. | 0.11.3 |
| util.deprecate(fn, msg[, code]) | Enveloppe une fonction afin qu'elle émette un avertissement de dépréciation lorsqu'elle est appelée. | 0.8.0 |
| util.format(format[, ...args]) | Formate une chaîne en utilisant le premier argument comme chaîne de format de type printf. | 0.5.3 |
| util.formatWithOptions(inspectOptions, format[, ...args]) | Similaire à util.format(), mais accepte les options d'inspection. | 10.0.0 |
| util.getSystemErrorName(err) | Renvoie le nom de l'erreur système représenté par le code d'erreur err. | 9.7.0 |
| util.inherits(constructor, superConstructor) | Hérite des méthodes de prototype d'un constructeur vers un autre constructeur (obsolète ; il est recommandé d'utiliser la syntaxe class et extends d'ES6). | 0.3.0 |
| util.inspect(object[, options]) | Renvoie la représentation sous forme de chaîne de caractères de object, utilisée pour le débogage. | 0.3.0 |
| util.isDeepStrictEqual(val1, val2) | Teste si deux valeurs sont profondément strictement égales. | 9.0.0 |
| util.promisify(original) | Convertit une fonction de style callback en une fonction qui renvoie une Promise. | 8.0.0 |
| util.stripVTControlCharacters(str) | Supprime les codes d'échappement ANSI d'une chaîne. | 16.11.0 |
| util.TextDecoder | Alias de l'implémentation standard WHATWG de TextDecoder. | 8.3.0 |
| util.TextEncoder | Alias de l'implémentation standard TextEncoder du WHATWG. | 8.3.0 |
| util.types | Fournit un objet utilitaire pour divers contrôles de type Node.js. | 10.0.0 |
| util.aborted(err, signal) | Vérifie si une erreur est causée par un signal d'abandon. | 18.18.0 |
| util.parseArgs([config]) | Fonction utilitaire pour analyser les arguments de ligne de commande. | 18.3.0 |
Méthodes fournies par util.types
| Méthode | Description |
|---|---|
| util.types.isAnyArrayBuffer(value) | Vérifie s'il s'agit d'une instance de AnyArrayBuffer. |
| util.types.isArrayBuffer(value) | Vérifie s'il s'agit d'une instance de ArrayBuffer. |
| util.types.isAsyncFunction(value) | Vérifie s'il s'agit d'une fonction asynchrone. |
| util.types.isBigInt64Array(value) | Vérifie s'il s'agit d'une instance de BigInt64Array. |
| util.types.isBigUint64Array(value) | Vérifie s'il s'agit d'une instance de BigUint64Array. |
| util.types.isBooleanObject(value) | Vérifie s'il s'agit d'un objet Boolean. |
| util.types.isBoxedPrimitive(value) | Vérifie s'il s'agit d'une primitive encapsulée. |
| util.types.isCryptoKey(value) | Vérifie s'il s'agit d'une instance de CryptoKey. |
| util.types.isDataView(value) | Vérifie s'il s'agit d'une instance de DataView. |
| util.types.isDate(value) | Vérifie s'il s'agit d'une instance de Date. |
| util.types.isExternal(value) | Vérifie s'il s'agit d'une valeur native externe. |
| util.types.isFloat32Array(value) | Vérifie s'il s'agit d'une instance de Float32Array. |
| util.types.isFloat64Array(value) | Vérifie s'il s'agit d'une instance de Float64Array. |
| util.types.isGeneratorFunction(value) | Vérifie s'il s'agit d'une fonction génératrice. |
| util.types.isGeneratorObject(value) | Vérifie s'il s'agit d'un objet générateur. |
| util.types.isInt8Array(value) | Vérifie s'il s'agit d'une instance d'Int8Array. |
| util.types.isInt16Array(value) | Vérifie s'il s'agit d'une instance d'Int16Array. |
| util.types.isInt32Array(value) | Vérifie s'il s'agit d'une instance d'Int32Array. |
| util.types.isMap(value) | Vérifie s'il s'agit d'une instance de Map. |
| util.types.isMapIterator(value) | Vérifie s'il s'agit d'un itérateur de Map. |
| util.types.isModuleNamespaceObject(value) | Vérifie s'il s'agit d'un objet d'espace de noms de module. |
| util.types.isNativeError(value) | Vérifie s'il s'agit d'un objet d'erreur natif. |
| util.types.isNumberObject(value) | Vérifie s'il s'agit d'un objet Number. |
| util.types.isPromise(value) | Vérifie s'il s'agit d'une Promise. |
| util.types.isProxy(value) | Vérifie s'il s'agit d'un objet Proxy. |
| util.types.isRegExp(value) | Vérifie s'il s'agit d'un objet RegExp. |
| util.types.isSet(value) | Vérifie s'il s'agit d'une instance Set. |
| util.types.isSetIterator(value) | Vérifie s'il s'agit d'un itérateur de Set. |
| util.types.isSharedArrayBuffer(value) | Vérifie s'il s'agit d'une instance de SharedArrayBuffer. |
| util.types.isStringObject(value) | Vérifie s'il s'agit d'un objet String. |
| util.types.isSymbolObject(value) | Vérifie s'il s'agit d'un objet Symbol. |
| util.types.isTypedArray(value) | Vérifie s'il s'agit d'une instance de TypedArray. |
| util.types.isUint8Array(value) | Vérifie s'il s'agit d'une instance de Uint8Array. |
| util.types.isUint8ClampedArray(value) | Vérifie s'il s'agit d'une instance de Uint8ClampedArray. |
| util.types.isUint16Array(value) | Vérifie s'il s'agit d'une instance de Uint16Array. |
| util.types.isUint32Array(value) | Vérifie s'il s'agit d'une instance de Uint32Array. |
| util.types.isWeakMap(value) | Vérifie s'il s'agit d'une instance de WeakMap. |
| util.types.isWeakSet(value) | Vérifie s'il s'agit d'une instance de WeakSet. |
Résumé
de Node.jsutilLe module fournit de nombreuses fonctions utilitaires pratiques qui peuvent aider les développeurs à écrire du code plus efficacement. De la vérification de type au contrôle de flux asynchrone jusqu'à la sortie de débogage,utilLe module couvre de nombreux besoins de développement courants. Bien que le JavaScript moderne fournisse déjà de nombreuses solutions natives,utilLe module reste très utile dans de nombreux scénarios, notamment lorsqu'il s'agit de code hérité ou lorsque des fonctions utilitaires spécifiques sont nécessaires.
MaîtriserutilL'utilisation du module peut rendre votre développement Node.js plus confortable et plus efficace, en particulier pour le débogage et la conversion de code.
Modules intégrés de Node.js