Lire les entrées
Fait partie de la section Les bases de Node.js du Journey Node.js de Coddy. Leçon 30 sur 33.
Ajouter des notes une commande à la fois est lent lorsque la liste existe déjà ailleurs.
Un programme peut également lire l’entrée depuis stdin : du texte saisi au clavier ou transmis depuis un fichier. Sur un ordinateur portable, cat numbers.txt | node sum.js envoie un fichier vers stdin ; | s’appelle un tube. for await (const chunk of process.stdin) le lit morceau par morceau jusqu’à la fin. Joignez les morceaux, puis séparez-les en lignes.
// cat numbers.txt | node sum.js
let input = '';
for await (const chunk of process.stdin) {
input += chunk;
}
const numbers = input.split('\n').filter((line) => line !== '').map(Number);
console.log(numbers.reduce((a, b) => a + b, 0));Ici, la boîte Input du terminal alimente stdin. Le texte se termine généralement par un saut de ligne, donc la dernière ligne est vide : supprimez les lignes vides.
Défi
FacileSaisir les notes une par une avec add prend du temps quand tu as déjà une liste quelque part. Ajoute une commande import qui lit plusieurs notes à la fois depuis l’entrée du programme, stdin.
- Dans
notes.js, ajoute une commandeimport. Lis tout stdin dans une seule chaîne avecfor await, comme le montre la leçon. - Découpe le texte en lignes. Supprime les espaces au début et à la fin de chaque ligne, et ignore les lignes vides après cette suppression.
- Ajoute chaque ligne restante comme note avec
store.add, en attendant la fin de chaque opération. Ton écouteuraddedaffiche toujours une ligneSaved notepour chaque note. C’est normal. - Enfin, affiche
Imported, le nombre de notes ajoutées, puisnotes.. Avec cette entrée :Buy bread Call the bank Water the plantsnode notes.js importenregistre les trois lignes comme notes. Il affiche trois lignesSaved note, puis, à la fin :Sans aucune entrée, il affiche seulement :Imported 3 notes.Imported 0 notes.
Essaie : clique sur le bouton Input à côté de Run. Une zone s’ouvre sous les arguments. Saisis-y trois lignes, avec une ligne vide entre deux d’entre elles. Saisis import dans la zone après $ node notes.js, puis appuie sur Entrée. Ensuite, vide la zone Input et exécute de nouveau import : tu verras Imported 0 notes..
Essayez vous-même
// Votre outil de prise de notes commence ici.
import { rmSync } from 'node:fs';
import path from 'node:path';
import { formatNote } from './format.js';
import stats from './legacy/stats.cjs';
import store from './store.js';
const [command, ...words] = process.argv.slice(2);
const text = words.join(' ');
store.on('added', (note, n) => {
console.log(`Saved note ${n}.`);
});
const noteNumber = (word) => {
const n = Number(word);
if (!Number.isInteger(n) || n < 1 || n > store.notes.length) {
console.error(`No note ${word}`);
process.exit(1);
}
return n;
};
if (command === 'add') {
await store.add(text);
} else if (command === 'list') {
const owner = process.env.NOTES_OWNER ?? 'you';
console.log(`Notes for ${owner}`);
if (store.notes.length === 0) {
console.log('No notes yet');
}
const lines = store.notes.map((note, i) => formatNote(i + 1, note));
if (store.settings.sort === 'newest') {
lines.reverse();
}
lines.forEach((line) => console.log(line));
} else if (command === 'where') {
const file = path.join(process.cwd(), 'notes.json');
console.log(file);
console.log(path.basename(file));
} else if (command === 'stats') {
console.log(`${store.notes.length} notes, ${stats.countWords(store.notes)} words`);
} else if (command === 'done') {
const removed = await store.remove(noteNumber(words[0]));
console.log(`Done: ${removed}`);
} else if (command === 'remind') {
const note = store.notes[noteNumber(words[0]) - 1];
let count = 3;
const timer = setInterval(() => {
if (count > 0) {
console.log(count);
count -= 1;
} else {
console.log(note);
clearInterval(timer);
}
}, 200);
} else if (command === 'clear') {
rmSync('notes.json', { force: true });
console.log('Deleted notes.json');
} else {
if (command) {
console.error(`Unknown command: ${command}`);
}
console.error('Usage: node notes.js <command> [words]');
process.exit(1);
}
Toutes les leçons de Les bases de Node.js
1Exécuter JavaScript avec Node
Bonjour, NodeLire la commandeArguments de ligne de commandeCommandes5Événements, entrées et packages
Écouter avant d’émettreÉmetteurs d’événementsLire les entréesEntraînez-vous par vous-même : Playground Express