Membaca Input
Termasuk bagian Dasar-Dasar Node.js dalam perjalanan Node.js di Coddy. Pelajaran 21 dari 24.
Menambahkan catatan satu perintah setiap kali terasa lambat jika daftarnya sudah ada di tempat lain.
Program dapat membaca input dari stdin, aliran yang diisi oleh pipe atau keyboard. for await (const chunk of process.stdin) membacanya bagian demi bagian hingga selesai. Gabungkan bagian-bagian itu, lalu pisahkan menjadi beberapa baris.
// 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));Di sini, kotak Input di terminal mengisi stdin. Teks biasanya diakhiri dengan baris baru, sehingga baris terakhir kosong: buang baris kosong.
Tantangan
Mudahnode notes.js importmembaca input, menyimpan satu catatan per baris, dan mencetakImported 3 notes..- Baris kosong dilewati, dan spasi di sekitar baris dihapus.
Ketik tiga baris di kotak Input, dengan satu baris kosong di antara dua baris, lalu jalankan node notes.js import. Kemudian jalankan perintah itu saat kotaknya kosong.
Coba sendiri
// Alat catatanmu dimulai di sini.
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);
}
Semua pelajaran di Dasar-Dasar Node.js
1Menjalankan JavaScript di Node
Halo, NodeArgumen Baris PerintahPerintahLatihan sendiri: Playground Express