Node.js Readline Module

Node.js Readline Module

The Readline module allows Node.js to read input from a readable stream, such as:

  • The terminal (stdin)

  • A file stream

It is mainly used to create command-line interfaces (CLI) where you take input from the user.

This module is built-in, so no installation is required.


✔️ Importing the Readline Module

CommonJS

const readline = require('readline');

ES Module

import readline from 'node:readline';

Creating a Readline Interface

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

rl is now your input/output interface.


📌 1. rl.question() — Ask a Question

rl.question("What is your name? ", (name) => {
console.log(Hello, ${name}!);
rl.close();
});

📌 2. rl.on(‘line’) — Event for Every Line Entered

rl.on('line', (input) => {
console.log(You typed: ${input});
});

You can close it manually:

rl.close();

📌 3. rl.on(‘close’) — Triggered When Interface Closes

rl.on('close', () => {
console.log("Goodbye!");
process.exit(0);
});

📌 4. Readline with Promises (Modern Usage)

(From Node.js v17+)

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

async function ask() {
const name = await rl.question("Enter your name: ");
console.log("Hello, " + name);
rl.close();
}

ask();


📌 5. Reading a File Line-by-Line

const fs = require('fs');
const readline = require('readline');

const rl = readline.createInterface({
input: fs.createReadStream("data.txt"),
crlfDelay: Infinity
});

rl.on('line', (line) => {
console.log(Line: ${line});
});

rl.on('close', () => {
console.log("File reading completed");
});


📌 6. rl.write() — Output Text Manually

rl.write("Welcome to CLI!\n");

📌 7. rl.setPrompt() & rl.prompt()

rl.setPrompt("cmd> ");
rl.prompt();

rl.on('line', (cmd) => {
console.log(Your command: ${cmd});
rl.prompt();
});


📌 8. rl.history — User Command History

console.log(rl.history);

⭐ Complete Example: Command-Line Calculator

const readline = require('readline');

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

rl.question("Enter first number: ", (num1) => {
rl.question("Enter second number: ", (num2) => {
console.log(Sum: ${Number(num1) + Number(num2)});
rl.close();
});
});

rl.on('close', () => {
console.log("Calculator closed");
});


⭐ Summary Table

Method / Event Description
createInterface() Creates input/output interface
question() Ask user a question
on('line') Trigger on each line input
on('close') Trigger when closed
setPrompt() Set command prompt text
prompt() Display prompt
write() Write output manually
.promises.question() Promise-based question

You may also like...