Módulo util de Node.js

Java FileMódulo integrado de Node.js


En Node.js,utilel módulo es un módulo principal que proporciona una serie de funciones de utilidad práctica. Estas funciones se utilizan principalmente para ayudar a los desarrolladores a completar tareas de programación comunes, como la comprobación de tipos, la implementación de herencia, la salida de depuración, etc.utilEl diseño original del módulo es compensar las deficiencias de las funciones nativas de JavaScript y proporcionar más conveniencia a los desarrolladores.

Para usarutilel módulo, solo necesitas incluirlo en tu código:

const util = require('util');

Funciones principales del módulo util

1. Herramientas de comprobación de tipos

utilEl módulo proporciona algunas funciones para la comprobación de tipos, que son más precisas y útiles que eltypeofoperador nativo de JavaScript.

util.types.isArrayBuffer(value)

Comprueba si el valor dado es una instancia de ArrayBuffer.

Ejemplo

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

util.types.isDate(value)

Comprueba si el valor dado es una instancia de Date.

Ejemplo

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

2. Funciones de utilidad práctica

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

Similar a la funciónprintfprintf de C, utilizada para formatear cadenas.

Ejemplo

const name = 'John';
const age = 30;
console.log(util.format('My name is %s and I am %d years old', name, age));
// Salida: My name is John and I am 30 years old

util.inspect(object[, options])

Devuelve la representación en cadena de un objeto, utilizada principalmente para depuración. Se pueden configurar opciones como profundidad, color, etc.

Ejemplo

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

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

3. Conversión de estilo callback

util.promisify(original)

Convierte funciones que siguen el estilo callback de Node.js en funciones que devuelven una Promise.

Ejemplo

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('Error reading file:', err);
  }
}

readConfig();

util.callbackify(original)

ypromisifyPor el contrario, convierte funciones que devuelven una Promise en funciones de estilo callback.

Ejemplo

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

const callbackFunc = util.callbackify(asyncFunc);

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

4. Herramientas de herencia

util.inherits(constructor, superConstructor)

Implementa la herencia prototípica (estilo ES5). Nota: en ES6, se recomienda usarclassyextendslas palabras clave.

Ejemplo

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

Animal.prototype.speak = function() {
  console.log(this.name + ' makes a noise.');
};

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

util.inherits(Dog, Animal);

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

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

Escenarios de aplicación práctica del módulo util

1. Depuración de objetos complejos

Cuando necesites imprimir la estructura de un objeto complejo,util.inspectque el simpleconsole.loges más poderoso:

Ejemplo

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. Modernización de código antiguo

Convierte código antiguo de estilo callback a estilo Promise:

Ejemplo

// Código antiguo de estilo callback
function oldStyleFunc(param, callback) {
  // Algunas operaciones asíncronas
  setTimeout(() => {
    callback(null, `Result for ${param}`);
  }, 100);
}

// Convertido a estilo Promise
const newStyleFunc = util.promisify(oldStyleFunc);

async function useNewStyle() {
  const result = await newStyleFunc('test');
  console.log(result); // Result for test
}

useNewStyle();

3. Inspección personalizada de objetos

Se puede personalizar elinspectmétodo del objeto para cambiarutil.inspectla salida de:

Ejemplo

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

Precauciones

  1. Consideraciones de rendimiento:util.inspectPuede tener un impacto en el rendimiento para objetos grandes, por lo que debe usarse con precaución en entornos de producción.
  2. Estabilidad de la API: Aunqueutilel módulo es un módulo principal, algunas API pueden seguir marcadas como experimentales.
  3. Alternativas modernas: Algunas funciones (comoutil.inherits) tienen mejores alternativas en JavaScript moderno (comoclasssintaxis).
  4. Manejo de errores: Al usarpromisify, asegúrate de manejar correctamente los errores y evitar los rechazos de Promise no capturados.

Métodos y propiedades

Método/Propiedad Descripción Versión de introducción
util.callbackify(original) Convierte una función async que devuelve una Promise en una función de estilo callback. 8.2.0
util.debuglog(section) Crea una función que solo registra mensajes cuando la variable de entorno NODE_DEBUG contiene la sección especificada. 0.11.3
util.deprecate(fn, msg[, code]) Envuelve una función para que emita una advertencia de obsolescencia cuando se llame. 0.8.0
util.format(format[, ...args]) Utiliza el primer argumento como una cadena de formato similar a printf para formatear cadenas. 0.5.3
util.formatWithOptions(inspectOptions, format[, ...args]) Similar a util.format(), pero acepta opciones de inspect. 10.0.0
util.getSystemErrorName(err) Devuelve el nombre del error del sistema representado por el código de error err. 9.7.0
util.inherits(constructor, superConstructor) Hereda los métodos del prototipo de un constructor a otro constructor (obsoleto, se recomienda usar class y extends de ES6). 0.3.0
util.inspect(object[, options]) Devuelve la representación en cadena de un objeto, para depuración. 0.3.0
util.isDeepStrictEqual(val1, val2) Comprueba si dos valores son estrictamente iguales en profundidad. 9.0.0
util.promisify(original) Convierte una función de estilo callback en una función que devuelve una Promise. 8.0.0
util.stripVTControlCharacters(str) Elimina los códigos de escape ANSI de una cadena. 16.11.0
util.TextDecoder Alias de la implementación TextDecoder estándar de WHATWG. 8.3.0
util.TextEncoder Alias de la implementación TextEncoder estándar de WHATWG. 8.3.0
util.types Proporciona un objeto de utilidades para la comprobación de varios tipos de Node.js. 10.0.0
util.aborted(err, signal) Comprueba si el error fue causado por una señal de aborto. 18.18.0
util.parseArgs([config]) Función de utilidad para analizar argumentos de línea de comandos. 18.3.0

Métodos proporcionados por util.types

Método Descripción
util.types.isAnyArrayBuffer(value) Comprueba si es una instancia de AnyArrayBuffer.
util.types.isArrayBuffer(value) Comprueba si es una instancia de ArrayBuffer.
util.types.isAsyncFunction(value) Comprueba si es una función asíncrona.
util.types.isBigInt64Array(value) Comprueba si es una instancia de BigInt64Array.
util.types.isBigUint64Array(value) Comprueba si es una instancia de BigUint64Array.
util.types.isBooleanObject(value) Comprueba si es un objeto Boolean.
util.types.isBoxedPrimitive(value) Comprueba si es un tipo primitivo empaquetado (boxed).
util.types.isCryptoKey(value) Comprueba si es una instancia de CryptoKey.
util.types.isDataView(value) Comprueba si es una instancia de DataView.
util.types.isDate(value) Comprueba si es una instancia de Date.
util.types.isExternal(value) Comprueba si es un valor nativo externo.
util.types.isFloat32Array(value) Comprueba si es una instancia de Float32Array.
util.types.isFloat64Array(value) Comprueba si es una instancia de Float64Array.
util.types.isGeneratorFunction(value) Comprueba si es una función generadora.
util.types.isGeneratorObject(value) Comprueba si es un objeto generador.
util.types.isInt8Array(value) Comprueba si es una instancia de Int8Array.
util.types.isInt16Array(value) Comprueba si es una instancia de Int16Array.
util.types.isInt32Array(value) Comprueba si es una instancia de Int32Array.
util.types.isMap(value) Comprueba si es una instancia de Map.
util.types.isMapIterator(value) Comprueba si es un iterador de Map.
util.types.isModuleNamespaceObject(value) Comprueba si es un objeto de espacio de nombres de módulo.
util.types.isNativeError(value) Comprueba si es un objeto de error nativo.
util.types.isNumberObject(value) Comprueba si es un objeto Number.
util.types.isPromise(value) Comprueba si es una Promise.
util.types.isProxy(value) Comprueba si es un objeto Proxy.
util.types.isRegExp(value) Comprueba si es un objeto RegExp.
util.types.isSet(value) Comprueba si es una instancia de Set.
util.types.isSetIterator(value) Comprueba si es un iterador de Set.
util.types.isSharedArrayBuffer(value) Comprueba si es una instancia de SharedArrayBuffer.
util.types.isStringObject(value) Comprueba si es un objeto String.
util.types.isSymbolObject(value) Comprueba si es un objeto Symbol.
util.types.isTypedArray(value) Comprueba si es una instancia de TypedArray.
util.types.isUint8Array(value) Comprueba si es una instancia de Uint8Array.
util.types.isUint8ClampedArray(value) Comprueba si es una instancia de Uint8ClampedArray.
util.types.isUint16Array(value) Comprueba si es una instancia de Uint16Array.
util.types.isUint32Array(value) Comprueba si es una instancia de Uint32Array.
util.types.isWeakMap(value) Comprueba si es una instancia de WeakMap.
util.types.isWeakSet(value) Comprueba si es una instancia de WeakSet.

Resumen

El módulo util de Node.jsutilproporciona muchas funciones de utilidad práctica, que pueden ayudar a los desarrolladores a escribir código de manera más eficiente. Desde la comprobación de tipos hasta el control de flujo asíncrono, pasando por la salida de depuración,utilel módulo cubre varios requisitos comunes en el desarrollo. Aunque JavaScript moderno ya ha proporcionado muchas soluciones nativas,utilel módulo sigue siendo muy útil en muchos escenarios, especialmente cuando se trabaja con código heredado o se necesitan funciones utilitarias específicas.

Dominarutilel uso del módulo puede hacer que tu desarrollo en Node.js sea más fluido, especialmente en la depuración y la conversión de código.

Java FileMódulos integrados de Node.js