Module readline 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 :
Créer une interface readline
Créerreadline.Interfaceune instance est au cœur de l'utilisation de ce module :
Exemple
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
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
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
Lorsque l'interface est fermée, lecloseévénement est déclenché :
Exemple
console.log('Goodbye!');
process.exit(0);
});
Fonctionnalités avancées
Historique
readlineLe module prend en charge la fonctionnalité d'historique des commandes :
Exemple
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
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.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 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 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é
Évitez d'utiliser eval() : L'exemple de calculatrice ci-dessus l'utilisait
eval(), 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é.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é.
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.
Modules intégrés de Node.js