Vamos destrinchar o código com máxima riqueza de detalhes, explicando cada linha e identificando o que é fórmula "pronta" (do Node.js) e o que foi personalizado por você.


const readline = require('readline/promises');

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

// Função para calcular a soma de um intervalo de números
function somaAte(inicio, fim) {
    let soma = 0;
    for (let i = inicio; i <= fim; i++) {
        soma += i;
    }
    return soma;
}

// Função para obter um número do usuário com tratamento de erro
async function obterNumero(prompt) {
    while (true) {
        const input = await rl.question(prompt);
        console.log(`Valor recebido: "${input}"`);
        const numero = parseInt(input);

        if (input.trim() && !isNaN(numero)) {
            return numero; // Retorna o número válido
        }

        console.log('Erro: Você deve inserir um número válido!');
    }
}

// Função principal para coordenar as interações
async function obterDados() {
    try {
        const number = await obterNumero('Digite um número: ');
        const number2 = await obterNumero('Digite outro número maior que o primeiro: ');

        if (number2 > number) {
            const resultado = somaAte(number, number2);
            console.log(`Resultado da soma de ${number} até ${number2}: ${resultado}`);
        } else {
            console.log('Erro: O segundo número deve ser maior que o primeiro!');
        }
    } catch (error) {
        console.error('Ocorreu um erro inesperado:', error.message);
    } finally {
        rl.close();
    }
}

obterDados();

1. Importação do módulo readline

const readline = require('readline/promises');


2. Criação da interface readline

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