Entrada/Saída de dados

Entrada de dados

Módulo readline

Node.js oferece o módulo nativo readline para ler entradas de dados do utilizador via terminal (stdin).

Exemplo básico:

const readline = require('readline');

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

rl.question('Qual é o seu nome? ', (nome) => {
console.log(`Olá, ${nome}!`);
rl.close();
});

Neste código:

  • Criamos uma interface para o terminal (rl).
  • A função rl.question exibe a pergunta e espera a resposta do utilizador.
  • Quando o utilizador responde e pressiona Enter, a resposta é recebida no callback (nome) => {...}.
  • A mensagem de saudação é exibida.
  • rl.close() fecha a interface para encerrar a leitura.

Tratamento de Erros e Conversão de Dados

Para capturar números e validar o input:

const readline = require('readline');

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

rl.question('Digite um número: ', (input) => {
const numero = parseInt(input);
if (isNaN(numero)) {
console.log('Por favor, digite um número válido.');
} else {
console.log(`Você digitou o número: ${numero}`);
}
rl.close();
});

Módulo prompt

O módulo “prompt” em Node.js é uma ferramenta para interagir com o utilizador via linha de comando, facilitando a entrada de dados durante a execução de programas.

1. Instalação do módulo prompt

Para usar o módulo, primeiro instale-o via npm:

npm install prompt

2. Importação e início do prompt

No seu arquivo JavaScript, importe o módulo e inicie o prompt:

var prompt = require('prompt');
prompt.start();

3. Solicitando entradas simples

Você pode pedir ao utilizador para digitar valores para propriedades específicas. Por exemplo, para pedir “username” e “email”:

prompt.get(['username', 'email'], function (err, result) {
if (err) { return onError(err); }
console.log('Utilizador: ' + result.username);
console.log('Email: ' + result.email);
});

function onError(err) {
console.error(err);
}

Ao executar este script, o console solicitará que o utilizador digite o seu username e email, e depois exibirá os valores.

4. Utilizando Promises (async/await)

O método prompt.get() retorna uma Promise se você não passar callback, permitindo o uso com async/await:

(async () => {
prompt.start();
try {
const { username, email } = await prompt.get(['username', 'email']);
console.log('Usuário:', username);
console.log('Email:', email);
} catch (err) {
console.error(err);
}
})();

5. Personalização da mensagem do prompt

Pode-se customizar a mensagem e o delimitador que aparecem para o utilizador:

prompt.message = "Digite aqui";
prompt.delimiter = " >> ";
prompt.start();

prompt.get(['nome'], function(err, result) {
console.log('Nome:', result.nome);
});

Nesse exemplo, o prompt mostrará algo como:

Digite aqui >> nome:

6. Definição de esquema com validação

Você pode definir propriedades com descrição, tipo, padrão e validação:

var schema = {
properties: {
idade: {
description: 'Qual a sua idade?',
type: 'number',
required: true,
message: 'Idade deve ser um número'
}
}
};

prompt.start();

prompt.get(schema, function(err, result) {
if (err) return onError(err);
console.log('Idade:', result.idade);
});

O prompt automaticamente validará que a entrada é um número e exigirá um valor.

7. Parar o prompt

Para encerrar o stream de entrada do prompt, você pode usar:

prompt.stop();

Desta forma libertarmos o stdin após uso.

Módulo prompt-sync

prompt-sync é um módulo do Node.js que possibilita solicitar entradas do utilizador no terminal de forma síncrona, ou seja, o programa espera o utilizador digitar algo antes de continuar a execução. É uma alternativa simples e direta ao uso de módulos baseados em callbacks ou eventos.

1. Instalação

No terminal, navegue até à pasta do seu projeto e execute:

npm install prompt-sync

2. Uso básico

No ficheiro JavaScript importe e execute o módulo para criar a função prompt:

const prompt = require('prompt-sync')();

Depois, use prompt() para exibir uma mensagem e capturar a entrada do utilizador:

const nome = prompt('Qual é o seu nome? ');
console.log(`Olá, ${nome}!`);

Exemplo completo:

const prompt = require('prompt-sync')();

const nome = prompt('Qual é o seu nome? ');
console.log(`Olá, ${nome}!`);

3. Tratando entradas numéricas

A entrada do utilizador é sempre uma string. Para usar números, converta os valores explicitamente:

const idadeStr = prompt('Digite sua idade: ');
const idade = Number(idadeStr);

if (isNaN(idade)) {
console.log('Por favor, digite um número válido!');
} else {
console.log(`Sua idade em 5 anos será: ${idade + 5}`);
}

4. Exemplo prático: calculadora simples

const prompt = require('prompt-sync')();

const num1 = Number(prompt('Digite o primeiro número: '));
const num2 = Number(prompt('Digite o segundo número: '));
const operador = prompt('Escolha a operação (+, -, *, /): ');

let resultado;

switch (operador) {
case '+':
resultado = num1 + num2;
break;
case '-':
resultado = num1 - num2;
break;
case '*':
resultado = num1 * num2;
break;
case '/':
resultado = num2 !== 0 ? num1 / num2 : 'Erro: divisão por zero';
break;
default:
resultado = 'Operação inválida';
}

console.log(`Resultado: ${resultado}`);

Resumo das características principais:

PacoteTipoSincroniaFuncionalidade
readlineNativo Node.jsAssíncronoEntrada básica via linha de comando
promptnpm (externo)AssíncronoEntrada simples com prompts
prompt-syncnpm (externo)SíncronoEntrada simples e síncrona

Saída de dados

Para imprimir mensagens ou resultados na consola, utiliza-se a função console.log().

Exemplo simples:

console.log("Olá, Mundo!");

var nome = "Pedro";
console.log(`Olá, ${nome}!`);

Ao executar com node ficheiro.js, esta mensagem aparecerá no terminal.