Módulo readline de Node.js

Java FileMódulos integrados de Node.js


De Node.jsreadlineEl módulo es una interfaz para leer de un flujo legible (por ejemplo,process.stdin) línea por línea. Proporciona una forma sencilla de manejar la entrada de la línea de comandos, muy adecuada para crear aplicaciones interactivas de línea de comandos.


Uso básico

Introducir el módulo readline

Para usarreadlineel módulo, primero debe importarlo:

const readline = require('readline');

Crear una interfaz readline

Crearreadline.Interfacela instancia es el núcleo del uso del módulo:

Ejemplo

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

Aquí creamos una interfaz que lee datos de la entrada estándar (teclado) y escribe la salida en la salida estándar (consola).


Métodos y eventos principales

Leer entrada línea por línea

Usarquestion()el método permite preguntar al usuario y esperar una respuesta:

Ejemplo

rl.question(`'¿Cómo te llamas?'`, (answer) => {
  console.log(`Hola, $`{answer}!`);
  rl.close();
});

Escuchar el evento line

Cuando el usuario introduce una línea y presiona Enter, se activalineel evento:

Ejemplo

rl.on('line', (input) => {
  console.log(`Recibido: $`{input}`);
  if (input === 'exit') {
    rl.close();
  }
});

Cerrar la interfaz

Usarclose()el método cierra la interfaz y libera recursos:

Ejemplo

rl.close();

Cuando la interfaz se cierra, se activacloseel evento:

Ejemplo

rl.on('close', () => {
  console.log(`'¡Adiós!'`);
  process.exit(0);
});

Funciones avanzadas

Historial

readlineEl módulo admite el historial de comandos:

Ejemplo

rl.history = [`'Comando 1'`, `'Comando 2'`];  `// Establecer historial`

El usuario puede usar las teclas de flecha arriba y abajo para navegar por el historial de comandos.

Autocompletado personalizado

Se puede implementar una función de autocompletado con Tab personalizada:

Ejemplo

rl.on('completer', (line) => {
  const completions = ['help', 'exit', 'show'];
  const hits = completions.filter((c) => c.startsWith(line));
  return [hits.length ? hits : completions, line];
});

Control del cursor

readlineSe proporcionan algunos métodos para controlar el cursor:

Ejemplo

readline.cursorTo(process.stdout, 10, 5);  `// Mover el cursor a la columna 10, fila 5`
readline.clearLine(process.stdout, 0);     `// Limpiar la línea actual`
readline.clearScreenDown(process.stdout);  `// Limpiar el contenido debajo del cursor`

Ejemplos de aplicaciones prácticas

Crear un sencillo programa de preguntas y respuestas por línea de comandos

Ejemplo

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

const questions = [
  `'¿Cómo te llamas?'`,
  `'¿Cuántos años tienes?'`,
  `'¿Cuál es tu lenguaje de programación favorito?'`
];

const answers = [];

function askQuestion(i = 0) {
  if (i >= questions.length) {
    console.log(`'Gracias por tus respuestas:'`, answers);
    return rl.close();
  }

  rl.question(questions[i], (answer) => {
    answers.push(answer);
    askQuestion(i + 1);
  });
}

askQuestion();

Crear una sencilla calculadora de línea de comandos

Ejemplo

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

function calculator() {
  rl.question(`'Ingrese una expresión (por ejemplo: 2 + 3 o escriba exit para salir): '`, (input) => {
    if (input === 'exit') {
      return rl.close();
    }

    try {
      const result = eval(input);  `// Nota: en una aplicación real, evite usar eval directamente`
      console.log(`Resultado: ${result}`);
    } catch (e) {
      console.log(`'Expresión inválida'`);
    }

    calculator();  `// Llamada recursiva para continuar con el siguiente cálculo`
  });
}

calculator();

Consideraciones de seguridad

  1. Evite usar eval(): el ejemplo de calculadora anterior usóeval()lo cual no es seguro en un entorno de producción porque ejecutaría cualquier código JavaScript ingresado.

  2. Validación de entrada: valide siempre la entrada del usuario para prevenir ataques de inyección u otros problemas de seguridad.

  3. Manejo de errores: agregue un manejo de errores adecuado para todas las operaciones asíncronas.


Resumen

De Node.jsreadlineel módulo es una potente herramienta para construir herramientas interactivas de línea de comandos. Con él podemos:

  • Obtener fácilmente la entrada del usuario
  • Crear interfaces interactivas de preguntas y respuestas
  • Implementar el historial de comandos
  • Añadir la función de autocompletado con Tab
  • Controlar el cursor y la salida de la terminal

Dominarreadlineel módulo es un paso importante en el desarrollo de herramientas de línea de comandos de Node.js. Espero que este artículo te ayude a comprender y usar este módulo.

Java FileMódulos integrados de Node.js

Otras extensiones