Module readline de Node.js

Java FileModules intégrés de Node.js


de Node.jsreadlineLe module est une interface pour lire des données ligne par ligne à partir d'un flux lisible (tel queprocess.stdin). Il fournit un moyen simple de gérer les entrées en ligne de commande et est très adapté à la création d'applications interactives en ligne de commande.


Utilisation de base

Importer le module readline

Pour utiliserreadlinemodule, vous devez d'abord l'importer :

const readline = require('readline');

Créer une interface readline

Créerreadline.Interfaceune instance est au cœur de l'utilisation de ce module :

Exemple

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

Ici, nous avons créé une interface qui lit les données depuis l'entrée standard (le clavier) et écrit la sortie vers la sortie standard (la console).


Méthodes et événements principaux

Lecture de l'entrée ligne par ligne

Utiliserquestion()méthode pour poser une question à l'utilisateur et attendre une réponse :

Exemple

rl.question('Quel est votre nom ?', (answer) => {
  console.log(`Hello, ${answer}!`);
  rl.close();
});

Écoute de l'événement line

Lorsque l'utilisateur saisit une ligne et appuie sur Entrée, l'lineévénement est déclenché :

Exemple

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

Fermeture de l'interface

Utiliserclose()méthode pour fermer l'interface et libérer les ressources :

Exemple

rl.close();

Lorsque l'interface est fermée, lecloseévénement est déclenché :

Exemple

rl.on('close', () => {
  console.log('Goodbye!');
  process.exit(0);
});

Fonctionnalités avancées

Historique

readlineLe module prend en charge la fonctionnalité d'historique des commandes :

Exemple

rl.history = ['command1', 'command2'];  // Définir l'historique

Les utilisateurs peuvent utiliser les touches fléchées haut et bas pour parcourir les commandes historiques.

Complétion personnalisée

Vous pouvez implémenter une fonctionnalité de complétion personnalisée avec la touche Tab :

Exemple

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

Contrôle du curseur

readlineFournit quelques méthodes pour contrôler le curseur :

Exemple

readline.cursorTo(process.stdout, 10, 5);  // Déplacer le curseur vers la colonne 10, ligne 5
readline.clearLine(process.stdout, 0);     // Effacer la ligne actuelle
readline.clearScreenDown(process.stdout);  // Effacer le contenu sous le curseur

Exemples d'applications pratiques

Créer un programme simple de questions-réponses en ligne de commande

Exemple

const readline = require('readline');

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

const questions = [
  'Quel est votre nom ?',
  'Quel âge avez-vous cette année ?',
  'Quel est votre langage de programmation préféré ?'
];

const answers = [];

function askQuestion(i = 0) {
  if (i >= questions.length) {
    console.log('Merci pour vos réponses :', answers);
    return rl.close();
  }

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

askQuestion();

Créer une calculatrice simple en ligne de commande

Exemple

const readline = require('readline');

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

function calculator() {
  rl.question('Veuillez saisir une expression (par ex., 2 + 3, ou tapez exit pour quitter) : ', (input) => {
    if (input === 'exit') {
      return rl.close();
    }

    try {
      const result = eval(input);  // Remarque : dans les applications réelles, évitez d'utiliser eval directement
      console.log(`Résultat: ${result}`);
    } catch (e) {
      console.log('Expression invalide');
    }

    calculator();  // Appel récursif pour continuer le calcul suivant
  });
}

calculatrice();

Considérations de sécurité

  1. Évitez d'utiliser eval() : L'exemple de calculatrice ci-dessus l'utilisaiteval(), ce qui n'est pas sûr en environnement de production car il exécute tout code JavaScript fourni en entrée. Dans les applications réelles, vous devriez utiliser un analyseur d'expressions dédié.

  2. Validation des entrées: Validez toujours les entrées utilisateur pour prévenir les attaques par injection ou d'autres problèmes de sécurité.

  3. Gestion des erreurs: Ajoutez une gestion appropriée des erreurs pour toutes les opérations asynchrones.


Résumé

de Node.jsreadlinemodule est un outil puissant pour créer des outils interactifs en ligne de commande. Avec lui, nous pouvons :

  • Obtenir facilement les entrées utilisateur
  • Créer des interfaces interactives de style questions-réponses
  • Implémenter l'historique des commandes
  • Ajouter la fonctionnalité de complétion par tabulation
  • Contrôler le curseur du terminal et la sortie

MaîtrisezreadlineLe module est une étape importante dans le développement d'outils en ligne de commande Node.js. J'espère que cet article vous aidera à comprendre et à utiliser ce module.

Java FileModules intégrés de Node.js

Autres extensions