ماژول Readline در Node.js

ماژول readline در Node.js یک رابط برای خواندن داده‌ها از جریان‌های Readable (مانند process.stdin) به‌صورت خط‌به‌خط فراهم می‌کند. این ماژول برای ساخت رابط‌های خط فرمان (CLI)، دریافت ورودی کاربر، و پردازش فایل‌ها به‌صورت خطی بسیار کاربردی است. Node.js دو API برای استفاده از این ماژول ارائه می‌دهد: نسخهٔ مبتنی بر Promise و نسخهٔ مبتنی بر Callback.

readline.Interface / readlinePromises.Interfaceline, close, pause, resume, SIGINT, SIGTSTPrl.question()rl.prompt(), rl.setPrompt(), rl.getPrompt()rl.write(), rl.cursorTo(), rl.moveCursor()

~2 دقیقه مطالعه • بروزرسانی ۹ دی ۱۴۰۴

1. معرفی


ماژول readline برای خواندن ورودی کاربر یا داده‌های فایل به‌صورت خطی استفاده می‌شود. می‌توان آن را با require('node:readline') یا نسخهٔ Promise با require('node:readline/promises') بارگذاری کرد.


2. ساخت Interface


const readline = require('node:readline');
const { stdin: input, stdout: output } = require('node:process');
const rl = readline.createInterface({ input, output });

3. رویدادهای مهم


  • line: هنگام دریافت یک خط ورودی.
  • close: هنگام بسته شدن رابط.
  • pause / resume: توقف و ادامهٔ جریان ورودی.
  • SIGINT: دریافت Ctrl+C.
  • SIGTSTP / SIGCONT: مدیریت ارسال پردازش به پس‌زمینه و بازگرداندن آن.
  • history: تغییر در تاریخچهٔ ورودی‌ها.

4. متدهای کلیدی


  • rl.question(query, callback): نمایش پرسش و دریافت پاسخ کاربر.
  • rl.prompt(): نمایش prompt و انتظار برای ورودی.
  • rl.setPrompt(prompt): تنظیم متن prompt.
  • rl.getPrompt(): دریافت prompt فعلی.
  • rl.write(data[, key]): نوشتن داده یا شبیه‌سازی ورودی کلید.
  • rl.close(): بستن رابط.

5. استفاده از AsyncIterator


رابط readline از for await...of پشتیبانی می‌کند تا بتوان خطوط ورودی را به‌صورت asynchronous پردازش کرد:


for await (const line of rl) {
  console.log(`Received: ${line}`);
}

6. مثال‌ها


  • CLI ساده: ساخت رابط خط فرمان با دستورات سفارشی.
  • خواندن فایل خط‌به‌خط: استفاده از fs.createReadStream() همراه با readline.

7. کلیدهای میانبر TTY


ماژول readline از کلیدهای میانبر مانند Ctrl+C، Ctrl+D، Ctrl+U، Ctrl+K برای مدیریت ورودی پشتیبانی می‌کند.


نتیجه‌گیری


ماژول readline ابزاری قدرتمند برای ساخت رابط‌های تعاملی در Node.js است. با پشتیبانی از Promise و Callback، رویدادهای متنوع، و قابلیت پردازش فایل‌ها به‌صورت خطی، این ماژول یکی از ابزارهای کلیدی برای توسعهٔ برنامه‌های CLI و ابزارهای پردازش داده محسوب می‌شود.


نوشته و پژوهش شده توسط دکتر شاهین صیامی