Lire les données saisies
Fait partie de la section Les bases de Node.js du Journey Node.js de Coddy. Leçon 21 sur 24.
Ajouter des notes une commande à la fois est lent lorsque la liste existe déjà ailleurs.
Un programme peut lire l’entrée depuis stdin, le flux alimenté par un tube ou le clavier. for await (const chunk of process.stdin) la lit morceau par morceau jusqu’à ce qu’elle se termine. Assemble les morceaux, puis sépare-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 zone de saisie du terminal alimente stdin. Le texte se termine généralement par un saut de ligne, donc la dernière ligne est vide : supprime les lignes vides.
Défi
Facilenode notes.js importlit son entrée, enregistre une note par ligne et afficheImported 3 notes..- Les lignes vides sont ignorées et les espaces autour d’une ligne sont supprimés.
Saisissez trois lignes dans la zone de saisie, avec une ligne vide entre deux d’entre elles, puis exécutez node notes.js import. Ensuite, exécutez-le avec la zone vide.
Essayez vous-même
// Votre outil de gestion des 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, NodeArguments de ligne de commandeCommandes