Module util de Node.js

Java FileModules intégrés 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

const arrBuffer = new ArrayBuffer(8);
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(new Date())); // true
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 name = 'John';
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

const obj = {
  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 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('Erreur de lecture du fichier :', err);
  }
}

readConfig();

util.callbackify(original)

etpromisifyInversement, convertit les fonctions qui renvoient des promesses en fonctions de style callback.

Exemple

async function asyncFunc() {
  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

function Animal(name) {
  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

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. Modernisation du code ancien

Convertir du code ancien de style callback en style Promise:

Exemple

// Ancien code de style callback
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

class CustomObject {
  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

  1. 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.
  2. Stabilité de l'API: Bien queutilLe module est un module principal, mais certaines API peuvent encore être marquées comme fonctionnalités expérimentales.
  3. Alternatives modernes: Certaines fonctionnalités (telles queutil.inherits) ont de meilleures alternatives en JavaScript moderne (comme laclasssyntaxe).
  4. Gestion des erreurs: Lors de l'utilisationpromisifyassurez-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.

Java FileModules intégrés de Node.js