Odczytywanie danych wejściowych
Część sekcji Podstawy Node.js ścieżki Node.js w Coddy. Lekcja 21 z 24.
Dodawanie notatek po jednej komendzie naraz jest powolne, gdy lista już istnieje gdzie indziej.
Program może odczytywać dane wejściowe ze standardowego wejścia (stdin), strumienia wypełnianego przez potok lub klawiaturę. for await (const chunk of process.stdin) odczytuje je kawałek po kawałku, aż do końca. Połącz kawałki, a następnie podziel je na wiersze.
// 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));Tutaj pole Input terminala wypełnia stdin. Tekst zwykle kończy się znakiem nowego wiersza, więc ostatni wiersz jest pusty: usuń puste wiersze.
Wyzwanie
Łatwynode notes.js importodczytuje dane wejściowe, zapisuje po jednej notatce w każdym wierszu i wyświetlaImported 3 notes..- Puste wiersze są pomijane, a spacje wokół wiersza są usuwane.
Wpisz trzy wiersze w polu Input, pozostawiając pusty wiersz między dwoma z nich, i uruchom node notes.js import. Następnie uruchom go z pustym polem.
Spróbuj swoich sił
// Twoje narzędzie do notatek zaczyna się tutaj.
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);
}
Wszystkie lekcje w sekcji Podstawy Node.js
1Uruchamianie JavaScript w Node
Witaj, NodeArgumenty wiersza poleceńPolecenia